美文网首页
个推QQ分享之后App界面无响应解决方案

个推QQ分享之后App界面无响应解决方案

作者: MLLWF | 来源:发表于2018-01-30 12:11 被阅读0次

    原因:QQ分享打来的Activity示例,在我们返回到APP的时候并没有被销毁掉,依然处于我们APP的栈顶。导致我们操作本应用的界面没有效果!
    解决方案:

    1. 首先在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);
           }
       });
      
    2. 当分享之后返回到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()方法;

    1. 之后根据第一步生命在活动实例集合,进行逐一遍历,根据活动实例的路径进行判断,如果有"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();
                    }
                }
            }
        }
    }
    

    相关文章

      网友评论

          本文标题:个推QQ分享之后App界面无响应解决方案

          本文链接:https://www.haomeiwen.com/subject/efoqzxtx.html