Android lunchMode singleTask模式,home 键之后回到首页
背景
我们的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 键之后回到首页相关推荐
- android中singleTask的home键的问题
在Android设计中遇到这样一个问题: Activity A,在中设置它的一个为 AndroidManifest.xml代码 <intent-filter> <action and ...
- Android中singleTask模式没起作用!!
看了这篇文章后终于找到了原因所在http://blog.csdn.net/luoshengyang/article/details/6714543 原来需要给不同的singleTask指定不同的tas ...
- android.intent.action.MAIN和singleTask模式 的奇怪问题
最近在研究activity被系统回收后,如何重新启动app,看到了一篇文章,突然想起是之前遇到的一个问题,没有整理,今天记录一下,具体原因我没有搞明白,希望大神们指点指点. <activity ...
- Android之点击Home键后再次打开导致APP重启问题
问题描述: 1.开发者打包发布一个release版本app,页面结构如下:闪屏页SplashActivity---> 登录页LoginActivity---> 主页MainActivity ...
- Android 监听home键(android:launchMode=singleTask 与 onNewIntent(Intent intent) 的用法
android:launchMode="singleTask" 和 onNewIntent(Intent intent)两个特性,现总结一下经验: android:launchMo ...
- Android Intent Flag实现singleTask模式
Android Intent Flag Android Intent 常用的Flag有以下几种: FLAG_ACTIVITY_NEW_TASK FLAG_ACTIVITY_CLEAR_TOP FLAG ...
- Android activity启动模式
如何正确理解和使用 Activity的4种启动模式 关于Activity启动模式的文章已经很多,但有的文章写得过于简单,有的则过于注重细节,本文想取一个折中,只关注最重要和最常用的概念,原理和使用方法 ...
- Activity的Launch mode详解,A B C D的singleTask模式
本文参考了此文http://hi.baidu.com/amauri3389/blog/item/a54475c2a4b2f040b219a86a.html 另附 android task与back s ...
- Android Activity 启动模式详解
最近有群里的朋友问我 Activity的四种启动模式分别是什么意思? 当初因为项目比较忙,草草的解释了下, Api文档中说的也只是一般,在这里就小记一下吧,以便有更多的朋友对Activity启动模式了 ...
最新文章
- 使用websocket-sharp来创建c#版本的websocket服务
- Spring Cloud Netflix尤里卡
- linux 查看shell脚本执行了多长时间
- FAMP5.1.0一键安装包,nginx和apache自由切换,拥有WEB控制面板
- 聚类算法_案例实战:聚类实战
- element ui下拉框实现
- 拓端tecdat|r语言多均线股票价格量化策略回测
- 同义词林Java如何更新维护,solr词库实时更新维护
- VINS-Mono 代码解析——视觉跟踪 feature_trackers
- 手把手教你修改butterfly主题的样式
- C语言输入一个大写字母,输出金字塔打印字母
- DJL-Java开发者动手学深度学习之线性回归
- Python 输出100-999的水仙花数
- pytorch实现 chatbot聊天机器人
- picked up java_tool_options:_解决ubuntu中JDK的Picked up JAVA_TOOL_OPTIONS提示问题。
- 12月6日 DDPM操作步骤
- 科研项目管理系统 — 出人才、出成果、出效益
- 移动通信增值业务概述
- 安卓那些你不得不收藏的开源库
- ICCV 2023截止时间
热门文章
- java简单的面试题目_简单的面试题目,大跌眼镜的结果
- idea 编译java程序_Java,Hello World,《算法》环境搭建中的问题,用 cmd 和 IntelliJ Idea 分别编译和运行 Java 程序...
- java继承的知识点_Java知识点梳理——继承
- uiautomatorviewer_【问题】解决Android8.0以上运行不了uiautomatorviewer的办法
- C++ 基本数据类型
- BZOJ2351[BeiJing2011]Matrix——二维hash
- ScheduledThreadPoolExecutor详解
- OpenStack(Kilo版本)基础架构学习笔记
- TSPL学习笔记(1)
- Python访问MySQL数据库