背景

我们的welcome 页面是singleTask 的。启动之后,到主页面,home 键之后,是可以回到正常的主页面。

是因为:我们welcome 页面启动之后就销毁了,从堆栈消失了。然后我点击桌面,虽然启动的是welcome,但是我在onCreate 里面,判断了从哪里来的,如果是的话,就finish welcome。根本不影响原来的堆栈。
但是如果不finish 原来的activity ,那么点击桌面肯定会把之前的页面全部从堆栈清除掉。就会出现,点击回去之后,用户的状态全没有了。你在onNewIntent 里面写东西也白搭,因为已经把之前的activity 清除了。

相关的finish 的代码是:

if(getIntent() != null && (getIntent().getFlags() & Intent.FLAG_ACTIVITY_BROUGHT_TO_FRONT) != 0 && initLauncherFlag(getIntent())){finish();
}

后来我调研的时候,出现了一个问题,当时我没有看log,不知道进程死了,我还以为没有跳转。log 如下:

  Process: com.ireader.plug.sdk, PID: 5301android.util.SuperNotCalledException: Activity {com.ireader.plug.sdk/com.ireader.plug.sdk.activity.MainActivity} did not call through to super.onCreate()at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2568)

原因是:

 @Overrideprotected void onCreate(Bundle savedInstanceState) {if(getIntent() != null && (getIntent().getFlags() & Intent.FLAG_ACTIVITY_BROUGHT_TO_FRONT) != 0 && initLauncherFlag(getIntent())){finish();return;}super.onCreate(savedInstanceState);}

我这里没有执行super.onCreate(savedInstanceState);需要改一下,不管怎么样,都要执行super.onCreate(savedInstanceState);,不然的话你的进程直接就挂了。

改完之后:

 @Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);if(getIntent() != null && (getIntent().getFlags() & Intent.FLAG_ACTIVITY_BROUGHT_TO_FRONT) != 0 && initLauncherFlag(getIntent())){finish();}}

注意:

if(getIntent() != null && (getIntent().getFlags() & Intent.FLAG_ACTIVITY_BROUGHT_TO_FRONT) != 0 && initLauncherFlag(getIntent())){finish();}

上面这个判断在有些手机上是有问题的,比如vivoX9, 主要是他们自己的桌面有自己的修改,Intent 里面的flag 修改了。
我们看下有问题的手机的flag: Integer.toHexString(getIntent().getFlags()) 是 0x10200000
而我们在onCreate 里面的判断是这个flag:
public static final int FLAG_ACTIVITY_BROUGHT_TO_FRONT = 0x00400000;
然后0x10200000 & 0x00400000 肯定不是0.

桌面全新启动应用程序的话,flag 是0x10000000

  /*** If set, when sending a broadcast the recipient is allowed to run at* foreground priority, with a shorter timeout interval.  During normal* broadcasts the receivers are not automatically hoisted out of the* background priority class.*/public static final int FLAG_RECEIVER_FOREGROUND = 0x10000000;

总结:

1.断点调试
2.没思路了要查看logCat

Android lunchMode singleTask模式,home 键之后回到首页相关推荐

  1. android中singleTask的home键的问题

    在Android设计中遇到这样一个问题: Activity A,在中设置它的一个为 AndroidManifest.xml代码 <intent-filter> <action and ...

  2. Android中singleTask模式没起作用!!

    看了这篇文章后终于找到了原因所在http://blog.csdn.net/luoshengyang/article/details/6714543 原来需要给不同的singleTask指定不同的tas ...

  3. android.intent.action.MAIN和singleTask模式 的奇怪问题

    最近在研究activity被系统回收后,如何重新启动app,看到了一篇文章,突然想起是之前遇到的一个问题,没有整理,今天记录一下,具体原因我没有搞明白,希望大神们指点指点. <activity ...

  4. Android之点击Home键后再次打开导致APP重启问题

    问题描述: 1.开发者打包发布一个release版本app,页面结构如下:闪屏页SplashActivity---> 登录页LoginActivity---> 主页MainActivity ...

  5. Android 监听home键(android:launchMode=singleTask 与 onNewIntent(Intent intent) 的用法

    android:launchMode="singleTask" 和 onNewIntent(Intent intent)两个特性,现总结一下经验: android:launchMo ...

  6. Android Intent Flag实现singleTask模式

    Android Intent Flag Android Intent 常用的Flag有以下几种: FLAG_ACTIVITY_NEW_TASK FLAG_ACTIVITY_CLEAR_TOP FLAG ...

  7. Android activity启动模式

    如何正确理解和使用 Activity的4种启动模式 关于Activity启动模式的文章已经很多,但有的文章写得过于简单,有的则过于注重细节,本文想取一个折中,只关注最重要和最常用的概念,原理和使用方法 ...

  8. Activity的Launch mode详解,A B C D的singleTask模式

    本文参考了此文http://hi.baidu.com/amauri3389/blog/item/a54475c2a4b2f040b219a86a.html 另附 android task与back s ...

  9. Android Activity 启动模式详解

    最近有群里的朋友问我 Activity的四种启动模式分别是什么意思? 当初因为项目比较忙,草草的解释了下, Api文档中说的也只是一般,在这里就小记一下吧,以便有更多的朋友对Activity启动模式了 ...

最新文章

  1. 使用websocket-sharp来创建c#版本的websocket服务
  2. Spring Cloud Netflix尤里卡
  3. linux 查看shell脚本执行了多长时间
  4. FAMP5.1.0一键安装包,nginx和apache自由切换,拥有WEB控制面板
  5. 聚类算法_案例实战:聚类实战
  6. element ui下拉框实现
  7. 拓端tecdat|r语言多均线股票价格量化策略回测
  8. 同义词林Java如何更新维护,solr词库实时更新维护
  9. VINS-Mono 代码解析——视觉跟踪 feature_trackers
  10. 手把手教你修改butterfly主题的样式
  11. C语言输入一个大写字母,输出金字塔打印字母
  12. DJL-Java开发者动手学深度学习之线性回归
  13. Python 输出100-999的水仙花数
  14. pytorch实现 chatbot聊天机器人
  15. picked up java_tool_options:_解决ubuntu中JDK的Picked up JAVA_TOOL_OPTIONS提示问题。
  16. 12月6日 DDPM操作步骤
  17. 科研项目管理系统 — 出人才、出成果、出效益
  18. 移动通信增值业务概述
  19. 安卓那些你不得不收藏的开源库
  20. ICCV 2023截止时间

热门文章

  1. java简单的面试题目_简单的面试题目,大跌眼镜的结果
  2. idea 编译java程序_Java,Hello World,《算法》环境搭建中的问题,用 cmd 和 IntelliJ Idea 分别编译和运行 Java 程序...
  3. java继承的知识点_Java知识点梳理——继承
  4. uiautomatorviewer_【问题】解决Android8.0以上运行不了uiautomatorviewer的办法
  5. C++ 基本数据类型
  6. BZOJ2351[BeiJing2011]Matrix——二维hash
  7. ScheduledThreadPoolExecutor详解
  8. OpenStack(Kilo版本)基础架构学习笔记
  9. TSPL学习笔记(1)
  10. Python访问MySQL数据库