標籤:-- art activity ext boolean sha classname ems 啟動
問題:當我們使用qq分享時,分享成功後選擇留在qq,這個時候按home鍵,回到手機主介面,在點擊回到我的app,這個時候會出現介面顯示出來了,但是任何事件都不響應,即按鈕沒反應。
分析:這個時候回到我們的app時,會發現activity的生命週期只走了 onRestart()---onStart(),走到這裡就結束了,onResume()並沒有執行,所以介面不響應
這個時候我們又會發現qq分享用到的的一個AssistActivity 它的生命週期:.: --onActivityResult()---onStart()---onResume()
結論:至此,我們發現了原因,是這個AssistActivity的問題。
解決:我們可以在我們程式的onStart()方法判斷一下,如果這個AssistActivity處在棧頂就把它清除掉。
@Overrideprotected void onStart() { super.onStart(); Log.i("---share----", "-----start"); if(isNeedRestart()){ Intent intent = new Intent(context, this.getClass()); intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); //清除棧頂的activity intent.addFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION);//不顯示多餘的動畫,假裝沒有重新啟動 //記得帶需要的參數 startActivity(intent); }}
private boolean isNeedRestart(){ ActivityManager am = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE); List<ActivityManager.RunningTaskInfo> tasks = am.getRunningTasks(1); if (!tasks.isEmpty()) { ComponentName topActivity = tasks.get(0).topActivity; ActivityManager.RunningTaskInfo taskInfo = tasks.get(0); if (topActivity.getPackageName().equals(context.getPackageName())) { // 若當前棧頂介面是AssistActivity,則需要手動關閉 if (topActivity.getClassName().equals("com.tencent.connect.common.AssistActivity")) return true; } } return false;}
Android 解決qq分享後返回程式出現的Bug