個(gè)推QQ分享之后App界面無響應(yīng)解決方案

原因:QQ分享打來的Activity示例,在我們返回到APP的時(shí)候并沒有被銷毀掉,依然處于我們APP的棧頂。導(dǎo)致我們操作本應(yīng)用的界面沒有效果!
解決方案:

  1. 首先在Application的onCreate方法中注冊(cè)一個(gè)活動(dòng)生命周期監(jiān)聽事件,并創(chuàng)建一個(gè)活動(dòng)集合,對(duì)APP打開和銷毀的活動(dòng)進(jìn)行統(tǒng)一管理;

         registerActivityLifecycleCallbacks(new ActivityLifecycleCallbacks() {
         @Override
         public void onActivityCreated(Activity activity, Bundle savedInstanceState) {
             WeqiaApplication.getInstance().getActivities().add(activity);
         }
    
         @Override
         public void onActivityStarted(Activity activity) {
         }
    
         @Override
         public void onActivityResumed(Activity activity) {
         }
    
         @Override
         public void onActivityPaused(Activity activity) {
         }
    
         @Override
         public void onActivityStopped(Activity activity) {
         }
    
         @Override
         public void onActivitySaveInstanceState(Activity activity, Bundle outState) {
         }
    
         @Override
         public void onActivityDestroyed(Activity activity) {
             WeqiaApplication.getInstance().getActivities().remove(activity);
         }
     });
    
  2. 當(dāng)分享之后返回到APP的頁(yè)面時(shí),在活動(dòng)實(shí)例的onRestart生命周期方法中,獲取當(dāng)前APP任務(wù)棧棧頂?shù)幕顒?dòng)實(shí)例路徑,
    并判斷是不是“com.umeng.qq.tencent.AssistActivity”(這個(gè)應(yīng)該是QQ的分享活動(dòng)實(shí)例的路徑);如果是說明分享之后QQ應(yīng)用的活動(dòng)實(shí)例還沒有銷毀掉,這時(shí)候我們就要手動(dòng)將它銷毀掉!

     private boolean isNeedRestart() {
     ActivityManager mActivityManager = (ActivityManager) this.getSystemService(Context.ACTIVITY_SERVICE);
     //獲取正在運(yùn)行的任務(wù)棧(一個(gè)應(yīng)用程序占用一個(gè)任務(wù)棧) 最近使用的任務(wù)棧會(huì)在最前面
     // 1表示給集合設(shè)置的最大容量
     List<ActivityManager.RunningTaskInfo> infos = mActivityManager.getRunningTasks(1);
     // 獲取最近運(yùn)行的任務(wù)棧中的棧頂Activity(即用戶當(dāng)前操作的activity)的包名
     String topName = infos.get(0).topActivity.getClassName();
     if (topName.equals("com.umeng.qq.tencent.AssistActivity")) {
         //如果是分享活動(dòng)實(shí)例,則返回TURE
         return true;
     }
     return false;   }
    

這里不能再onResume生命方法中進(jìn)行邏輯處理,因?yàn)榉祷氐紸PP之后,這個(gè)生命周期方法沒有被執(zhí)行,只執(zhí)行了onRestart()和start()方法;

  1. 之后根據(jù)第一步生命在活動(dòng)實(shí)例集合,進(jìn)行逐一遍歷,根據(jù)活動(dòng)實(shí)例的路徑進(jìn)行判斷,如果有"com.umeng.qq.tencent.AssistActivity"則移除這個(gè)活動(dòng)實(shí)例就可以了
 @Override
    protected void onRestart() {
    super.onRestart();
    //解決模型分享QQ之后,界面會(huì)死掉的問題
    if (isNeedRestart()) {
        List<Activity> activities = WeqiaApplication.getInstance().getActivities();
        //獲取當(dāng)前應(yīng)用任務(wù)棧里的活動(dòng)示例
        if (StrUtil.listNotNull(activities)) {
            for (Activity activity : activities) {
                String name = activity.getClass().getName();
                //獲取活動(dòng)的路徑
                L.e("name:::" + name);
                if (name.equals("com.umeng.qq.tencent.AssistActivity")) {
                    //如果是QQ分享活動(dòng),就結(jié)束掉!
                    activity.finish();
                }
            }
        }
    }
}
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • ¥開啟¥ 【iAPP實(shí)現(xiàn)進(jìn)入界面執(zhí)行逐一顯】 〖2017-08-25 15:22:14〗 《//首先開一個(gè)線程,因...
    小菜c閱讀 7,317評(píng)論 0 17
  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 178,893評(píng)論 25 709
  • 1: 獲取控件寬高 控件View有g(shù)etHeight()和getwidth()方法可以獲取寬高,但是如果直接在on...
    自由人是工程師閱讀 2,002評(píng)論 0 0
  • 我從地獄來穿過荊棘叢林晨霧是我的氣息我要到遙遠(yuǎn)的比云中的城堡還遠(yuǎn)的遠(yuǎn)方去泥土是我的腳印走了一半行程白天太陽(yáng)的熾熱讓...
    葺寶閱讀 165評(píng)論 0 1
  • “遠(yuǎn)方”,一個(gè)迷人的詞語,一個(gè)充滿誘惑的詞語。 遠(yuǎn)方是一個(gè)讓我們無限神往的地方,天涯海角沒有它廣闊,珠穆朗瑪也不及...
    天雨琦緣閱讀 231評(píng)論 0 1

友情鏈接更多精彩內(nèi)容