android Intent onNewIntent 什么时候调用
1.activity A 的lanch model 为singleTop
此刻,A在activity 栈顶,那么就会调用A 的onNewIntent
如果A不在栈顶,则不会调用。
2.activity A 的lanch model 为 singTask
如果task 里面已经有activity a 的实例,再次启动A就会调用onNewTask
3.如果activity A 的lanch model 为singleInstance
启动过activity A ,有activity A 的实例,那么就会调用onNewIntent
4.如果activity A 的启动模式为standard
启动activity的时候,
1).我增加了FLAG_ACTIVITY_CLEAR_TOP 和FLAG_ACTIVITY_SINGLE_TOP,那么如果有曾经启动过A,则会调用onNewIntent
Intent intent = new Intent(SecondActivity.this,MainActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
intent.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);
2)如果此时A在activity栈顶,那么只需要加FLAG_ACTIVITY_SINGLE_TOP 就可以让A执行onNewIntent
参考:https://www.cnblogs.com/zawn/archive/2012/10/23/2735875.html
Activity 的 onNewIntent方法的调用可总结如下:
在该Activity的实例已经存在于Task和Back stack中(或者通俗的说可以通过按返回键返回到该Activity )时,当使用intent来再次启动该Activity的时候,如果此次启动不创建该Activity的新实例,则系统会调用原有实例的onNewIntent()方法来处理此intent.
且在下面情况下系统不会创建该Activity的新实例:
1,如果该Activity在Manifest中的android:launchMode定义为singleTask或者singleInstance.
2,如果该Activity在Manifest中的android:launchMode定义为singleTop且该实例位于Back stack的栈顶.
3,如果该Activity在Manifest中的android:launchMode定义为singleTop,且上述intent包含Intent.FLAG_ACTIVITY_CLEAR_TOP标志.
4,如果上述intent中包含 Intent.FLAG_ACTIVITY_CLEAR_TOP 标志和且包含 Intent.FLAG_ACTIVITY_SINGLE_TOP 标志.
5,如果上述intent中包含 Intent.FLAG_ACTIVITY_SINGLE_TOP 标志且该实例位于Back stack的栈顶.
上述情况满足其一,则系统将不会创建该Activity的新实例.
根据现有实例所处的状态不同onNewIntent()方法的调用时机也不同,总的说如果系统调用onNewIntent()方法则系统会在onResume()方法执行之前调用它.这也是官方API为什么只说”you can count on onResume() being called after this method”,而不具体说明调用时机的原因.
注意:微博分享的实现方式就是通过增加flag 调用你的activity 的onNewIntent.当时我还想不通,为什么,我的activity 不是sigleTop 的也可以调用到onNewIntent上来。原来是动态加了flag,如果你已经有了实例,比如加flag:FLAG_ACTIVITY_SINGLE_TOP,系统就会去检查,如果已经有实例,那么就调用你的onNewIntent.
最新文章
- php中判断字符串是否全是中文或含有中文的实现代码
- error: L6235E: More than one section matches selector - cannot all be FIRST/LAST
- [知识点]平衡树之Splay
- openVPN报错:All TAP-Windows adapters on this system are currently in use
- Leetcode: UTF-8 Validation
- boost库学习之regex
- ABBYY FineReader 12最新官方版下载
- DevSecOps简介(二)
- 无聊拿socket写的100以内的加法考试。。。
- MatLab计算图像圆度
- Python学习笔记9-Python 链接MySql数据库
- zepto.js 学习之(一)
- [转]解析多级json数据为list中嵌套一级字典的形式
- 一个小实例理解js 原型和继承
- 怎样以快速样式的方式在word文档中生成以下多级自动编号
- 实验八 Web基础 SQL注入原理
- P4705 玩游戏
- Idea运行web项目时,提示java.lang.ClassNotFoundException: com.mysql.jdbc.Driver解决方法
- socket通讯---TcpClient
- javax.servlet-api 和 servlet-api 区别
热门文章
- Struts2_动态结果集
- Linux目录与文件的权限意义
- 解决ubuntu的chkconfig[/sbin/insserv 无法找到路径问题]
- HCNA配置telnet远程管理
- php程序员发展建议
- *389. Find the Difference (string + map(26)) read problems carefully
- JAVA对list集合进行排序Collections.sort()
- 【BZOJ3506】[CQOI2014] 排序机械臂(Splay)
- Poj(2236),简单并查集
- C# break语句