原因:QQ分享打来的Activity示例,在我们返回到APP的时候并没有被销毁掉,依然处于我们APP的栈顶。导致我们操作本应用的界面没有效果!
解决方案:
-
首先在Application的onCreate方法中注册一个活动生命周期监听事件,并创建一个活动集合,对APP打开和销毁的活动进行统一管理;
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); } });
-
当分享之后返回到APP的页面时,在活动实例的onRestart生命周期方法中,获取当前APP任务栈栈顶的活动实例路径,
并判断是不是“com.umeng.qq.tencent.AssistActivity”(这个应该是QQ的分享活动实例的路径);如果是说明分享之后QQ应用的活动实例还没有销毁掉,这时候我们就要手动将它销毁掉!private boolean isNeedRestart() { ActivityManager mActivityManager = (ActivityManager) this.getSystemService(Context.ACTIVITY_SERVICE); //获取正在运行的任务栈(一个应用程序占用一个任务栈) 最近使用的任务栈会在最前面 // 1表示给集合设置的最大容量 List<ActivityManager.RunningTaskInfo> infos = mActivityManager.getRunningTasks(1); // 获取最近运行的任务栈中的栈顶Activity(即用户当前操作的activity)的包名 String topName = infos.get(0).topActivity.getClassName(); if (topName.equals("com.umeng.qq.tencent.AssistActivity")) { //如果是分享活动实例,则返回TURE return true; } return false; }
这里不能再onResume生命方法中进行逻辑处理,因为返回到APP之后,这个生命周期方法没有被执行,只执行了onRestart()和start()方法;
- 之后根据第一步生命在活动实例集合,进行逐一遍历,根据活动实例的路径进行判断,如果有"com.umeng.qq.tencent.AssistActivity"则移除这个活动实例就可以了
@Override
protected void onRestart() {
super.onRestart();
//解决模型分享QQ之后,界面会死掉的问题
if (isNeedRestart()) {
List<Activity> activities = WeqiaApplication.getInstance().getActivities();
//获取当前应用任务栈里的活动示例
if (StrUtil.listNotNull(activities)) {
for (Activity activity : activities) {
String name = activity.getClass().getName();
//获取活动的路径
L.e("name:::" + name);
if (name.equals("com.umeng.qq.tencent.AssistActivity")) {
//如果是QQ分享活动,就结束掉!
activity.finish();
}
}
}
}
}