原因:QQ分享打來的Activity示例,在我們返回到APP的時(shí)候并沒有被銷毀掉,依然處于我們APP的棧頂。導(dǎo)致我們操作本應(yīng)用的界面沒有效果!
解決方案:
-
首先在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); } }); -
當(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()方法;
- 之后根據(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();
}
}
}
}
}