欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

Android 再次打开APP进入按Home键退出时的界面(thisTaskRoot)

程序员文章站 2023-08-30 15:53:25
问题 Android 设置页面的启动模式为 singletask 之后,当按Home 退出时,再重新打开应用,还会进入首启动页。就会造成一些应用需要重新登录,当前页数据丢失等问题 解决 去除启动页的 singletask 的启动模式(AndroidManifest.xml) 在启动页activity ......

 

问题

  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:

      Android 再次打开APP进入按Home键退出时的界面(thisTaskRoot)

   Android 再次打开APP进入按Home键退出时的界面(thisTaskRoot)