关于home键后,App重走冷启动页的处理

问题产生:因为开发时,要做微信登录,再登录时,测试告诉我,微信code失效,但是还登录成功了。

分析原因:根据自己写的代码,想到代码已经做了各种判断,所以不可能code失败,还登录成功的情况,但是事实就是摆在面前,确实登录成功了,对着自己写的app,自测了一下午,终于找清楚此问题的复现步骤,即:每次如果使用adb装的app,则不会出现此问题,如果使用了系统安装器(即,打好包,放到sd卡,点击安装),就会出现此问题,按下home键,每次再打开app,就会重走冷启动页,我就猜测,会不会,登录页启动了两次,导致登录接口调用了2次,一次成功登录,一次微信code失效..

后来让服务器的同学给看了下,验证了猜测,正式接口调用多次。

简单的梳理了下,复现步骤与原因,但是还是没找到根本原因(为什么系统安装器安装的app,按下home键之后,再点击app的logo进去app,会多次调用冷启动页);

简单说下复现步骤:

相信每个app大致都有的流程是这样的,SplashActivity(启动页) -->LoginActivity(登录页)-->HomeActivity(主页);

1、系统安装器安装的形式安装后,点击打开进去到app,走SplashActivity——》loginActivity--->HomeActivity,

2、按下手机Home键,回到手机主界面,再次点击app的logo进app,这时,会重新走SplashActivity—>LoginActivity—>HomeActivity

3、如果完全退出应用后,再以点击app的logo的形式,进app;

4、按下手机Home键,回到手机主界面,再次点击launcher进去到app,此时,直接到了HomeActivity页,此后变正常。

经过在,BaseActivity里,使用List存储了Activity的引用,发现每次Home键,再打开,都会多一个LoginActivity的引用。经过一番查阅资料最后找到了原因;

原文章:http://blog.csdn.net/zhangcanyan/article/details/52777265


这是因为

1、SplashActivity用安装器打开应用flag为FLAG_ACTIVITY_NEW_TASK,launcher打开应用比系统安装器多了FLAG_ACTIVITY_RESET_TASK_IF_NEEDED
2、用FLAG_ACTIVITY_NEW_TASK创建的任务栈,再用FLAG_ACTIVITY_RESET_TASK_IF_NEEDED(launcher方式)打开,会在AAActivity多了FLAG_ACTIVITY_BROUGHT_TO_FRONT
3、异常重复启动过程中,新建SplashActivity的TaskId与Pid一致,可确定还是在原有任务栈中创建Activity,打开多次LoginActivity(standard启动模式)会在原有任务栈中叠加。

解决办法:

 @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
       //判断SplashActivity是否位于栈底
        if (!isTaskRoot()) {
            finish();
            return;
        }
 }



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值