Android按home键打开多个Activity再按home键到桌面,然后再launcher中打开App无法保持状态

一、问题描述:

  情况1:app安装成功,从launcher(桌面)打开App到登录页--->输入手机号点击确定---->到输入密码页。然后再按home键返回到桌面再打开,此时Activity无法定位到输入密码页面,而是回到了登录页。

  情况2:app通过浏览器下载,成功后利用浏览器安装器打开---->输入手机号点击确定---->到输入密码页。然后再按home键返回到桌面再打开,此时Activity无法定位到输入密码页面,而是回到了登录页。此时按返回键,会回到输入密码页。

二、原因描述:

  1.第一种情况绝大多数原因是因为启动页的launchMode设置了singleTask。

  2.第二种情况是因为从launcher桌面打开和直接用安装器打开app所用的参数不同。

三、解决方案:

  1.第一种情况通过去掉再启动页中的launchMode=singleTask来完成

  2.第二种情况则除了要去掉启动页launchMode=singleTask外还需要再启动页的setContentView之前加入如下代码才行:

override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        if (intent.flags and Intent.FLAG_ACTIVITY_BROUGHT_TO_FRONT != 0) {
            finish()
            return
        }

  如果不加上面的代码经测试会发现,从launcher点击家打开app则一切正常,从安装器中打开app,就变得不正常了。

四、总结

  在实际的项目中需要综合考虑以上两种情况,确保无论是哪个入口app都能正常使用。其实这个问题要认真算起来还蛮严重的,加入你进入的不是输入密码页面,而是注册获取验证码页面,一旦home键,去查看验证码,然后再打开则原来的输入验证码页面就不见了,这种请款给用户的体验是非常不好的。

ps:附上参考链接:

  https://blog.csdn.net/liuyewu101/article/details/51506263

  https://blog.csdn.net/epitomizelu/article/details/103241679

  https://www.jianshu.com/p/b202690b7d96

  

原文地址:https://www.cnblogs.com/tony-yang-flutter/p/14430112.html