zoukankan      html  css  js  c++  java
  • Android 再次打开APP进入按Home键退出时的界面(thisTaskRoot)

    问题

      Android 设置页面的启动模式为 singletask 之后,当按Home 退出时,再重新打开应用,还会进入首启动页。就会造成一些应用需要重新登录,当前页数据丢失等问题

    解决

    • 去除启动页的 singletask 的启动模式(AndroidManifest.xml)

    • 在启动页activity添加如下代码

     1         // 避免从桌面启动程序后,会重新实例化入口类的activity
     2         if (!this.isTaskRoot()) { // 判断当前activity是不是所在任务栈的根
     3             Intent intent = getIntent();
     4             if (intent != null) {
     5                 String action = intent.getAction();
     6                 if (intent.hasCategory(Intent.CATEGORY_LAUNCHER) && Intent.ACTION_MAIN.equals(action)) {
     7                     finish();
     8                     return;
     9                 }
    10             }
    11         }

    分析

      虽然我们解决了问题,但我们也要分析解决问题的思路。

      哈哈哈,可能你说思路就是百度,别人这样写,反正我用了也成功了。(but 我们要往优秀程序员的方向发展)

    • 第一步(看代码进行了什么处理)

      第二行: this.isTaskRoot() 判断是否是activity栈 最下方一个

      第三行:getIntent() 获取该上一个页面传过来的intent的信息。因为在启动页中,我们会设置

                <intent-filter>
                    <action android:name="android.intent.action.MAIN" />
    
                    <category android:name="android.intent.category.LAUNCHER" />
                </intent-filter>

      第六行:判断是否通过启动页启动,也有可能是代码中的需求跳转,这种情况不能把页面销毁了。

      第七行:销毁当前启动页

      【思考】那么为什么如果是外部启动的就 finish 呢?

    • 第二步(看看别人怎么说)

       参考1:https://www.jianshu.com/p/eea14ca0b164

          

       

  • 相关阅读:
    关于Date相关函数在火狐Firefox和谷歌Chrome下的不同
    一键部署 LNMP 建站环境
    Python 返回值、方法和函数的区别
    Python中万物皆对象?的理解
    Python 实用小工具 练习(2)
    Chrome浏览器F12开发者工具使用教程博客汇总
    觅风易语言[21-24、30]
    觅风易语言[1-10]
    觅风易语言[11-20]
    Python Byte类型(API系列)
  • 原文地址:https://www.cnblogs.com/xqz0618/p/thistaskroot.html
Copyright © 2011-2022 走看看