onNewIntent是个什么东西?
来源:互联网 发布:91助手苹果mac版下载 编辑:程序博客网 时间:2024/04/26 03:54
Android API
很奇怪,谷歌没有在官方文档中说明这个方法
天无绝人之路,我们在源码中找到了这个方法
In either case, when the activity is re-launched while at the top of the activity stack instead of a new instance of the activity being started, onNewIntent() will be called on the existing instance with the Intent that was used to re-launch it.
翻译:
在任何情况下,当Activty位于栈顶并将被重新启动时,不会新创建一个新的实例,取而代之的是使用去重新启动的intent调用已经存在的实例中onNewIntent方法
谷歌的开发人员,我得吐槽一下,非要把这么重要的一句话放在singleTop后面,很容易让人以为必须设置singleTop才能调用onNewIntent方法,其实不是这样的!!!singleTask清除目标Activity上面的所有Activity,那目标不就是位于栈顶?singleInstance拥有一个独立的任务栈,所以也是位于栈顶的!
接下来我们出道题来思考下:
A和B的启动模式都是singleTask,并且AB均重写了onNewIntent方法,A方法里面是输出onNewIntent1,B方法里面是输出onNewIntent2,然后A启动B,B启动A,如此循环,问输出结果是什么?
答案是一直输出onNewIntent1,这是为什么呢?
1 启动A 因为A才创建于栈中,不会调用onNewIntent
2 启动B 因为B也是刚创建,所以也不会调用onNewIntent
3 启动A 因为设置的是singleTask模式,并且A已经存在,所以要把A上面的B清空,A就位于栈顶了,这个时候满足栈顶+已经存在,所以A调用方法输出onNewIntent1
4 启动B 因为B被清空,所以再次创建B,所以不会调用onNewIntent
5678….
弄明白了onNewIntent,我们再来理解一下四种启动模式:
standard 每次创建都是一个新的activity,谈不上已经存在,因为每次都是新的
singleTop
singleTop 如果栈顶是该activity就复用,不然的话就重新创建
singleTask
singleTask 如果栈中存在该activity,那么就把这个activity上面的所有activity都清空,让该activity位于栈顶,否则的话就创建
singleInstance
singleInstance 如果有该activity的话就复用,否则的话就新建一个栈并且就栈内就该activity一个activity,也是位于栈顶
- onNewIntent是个什么东西?
- ISA是个什么东西?
- uDig是个什么东西
- 木马是个什么东西
- 程序是个什么东西
- JPA是个什么东西
- ICMP是个什么东西
- NGen是个什么东西?
- 气质是个什么东西~~
- Cloudera是个什么东西
- ANativeWindow是个什么东西
- xmlns是个什么东西
- JavaBean到底是个什么东西?
- blog到底是个什么东西?
- HttpModule到底是个什么东西
- Lucene到底是个什么东西
- 钱到底是个什么东西?
- JavaBean到底是个什么东西
- Item41 Consider pass by value for copyable parameters that are cheap to move and always copied.
- JavaScript对象2
- 11-散列1 电话聊天狂人 (25分)
- 阻塞队列BlockingQueue
- JavaUtils-递归解析多级菜单(数据树)
- onNewIntent是个什么东西?
- [Unity3D 版本5.X]实现一个自由漫游的摄像机
- 悬浮按钮和可交互提示
- Android的android:width和android:layout_width
- 网易大数据面试题试解
- R语言预测初步(R语言预测实战-节选)
- TextView基本属性解析
- Java+sqlserver2014数据库连接
- Python实现八皇后问题