Android 四种launchMode及疑问


之前对于四种模式的理解仅限于理论和一两个简单的测试(singleTop和singleTask)

今天脑袋抽风想都实际测一下,晕,测到 singleInstance杯具了

请对四种模式熟悉的朋友直接跳到文章底部,帮忙看下singleInstance的问题,谢谢

 

未标明launchMode的Activity都是默认启动模式

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数据, 变成:

Android 四种launchMode及疑问_第1张图片

 

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

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

Android 四种launchMode及疑问_第2张图片 

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的实例 ?

你可能感兴趣的:(Android 四种launchMode及疑问)