`
wpf814533631
  • 浏览: 191928 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

(转)Android 四种launchMode

 
阅读更多

1,standard

每次都会新建一个Activity实例

 

2,singleTask

栈空间简易示意:A -- B -- C

 最后用startActivity(intent)从C跳到A后,由于栈空间已经存在A的实例,A上面的Activity B和C出栈(即onDestroy销毁),A置于栈顶

如果A中重写了onNewIntent(...)方法,会同时接到C跳A的intent数据

 

3,singTop

栈空间简易示意:A -- B -- C

最后用startActivity(intent)从C跳到A后,即使栈控件已经存在A的实例,Android系统也会重新创建一个A的实例并且置于栈顶,当然重写的onNewIntent(...)方法也不会接到intent数据, 变成:

 

4,singleInstance(代码跳转逻辑:A -- B -- C -- A -- B -- C .....)

1,起始Activity非singleInstance (实际跳转顺序:A -- B -- C -- A -- B -- C .....)

 

A,C位于同一栈中,taskId相同, B在另一个栈中,与他们taskId不同,此栈在B未被销毁前只能有B一个Activity(B在创建之后,onNewIntent(...)也可以接到 其他Activity跳转的intent数据),整个过程中,B只创建了一次,A与C每次都创建一个实例

2,起始Activity为singleInstance(实际跳转顺序:A -- B -- C -- A -- C -- A -- C .....)

代码中第一种情况相同,但实际跳转顺序却不同,

第一次A -- B -- C 实际跳转完成之后,当从C回到A(A在创建之后,onNewIntent(...)也可以接到其他Activity跳转的intent数据)后,再从A跳 B时,却跳到了C页面,依次循环,整个过程中,B只是在一开始创建时出现了一次,之后从A都是直接跳C,A当然是单实例的,但是C也只创建了一次,相当于 是单实例

多次跳转按物理返回键时:

如果当前页面是A,则A销毁,出现C,接着C销毁,出现B,B销毁,应用程序结束

如果当前页面是C,则C销毁,出现B,接着B销毁,出现A,A销毁,应用程序结束

返回键的实际跳转情况属于正常,因为A的taskId, 与B,C不同,不在同一栈中

 

但singleInstance的第2中情况,第一次A--B--C--A跳完之后,为啥从A却进入了C并且是之前的实例C,并不是想象中的新创建一个Activity B的实例 ?

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics