android LaunchMode之SingleTask

昨天看了一下SingleTask的LaunchMode,意思是说若是一个Activity在Manifest文件中的LaunchMode设置为SingleTask时,该Activity就在一个独立的Task中。当时看了文档以后,有点不明白的是“在一个独立的task中”如何理解?shell

其实,这句话的意思是保证这个activity处于"某一个"task中,而无论当前task中是否有其余activity(这也许就是与SingleInstance的根本区别吧)。例如,咱们有Root Activity A,在A中启动了ActivityB(launch mode是sinleTask)。这时Application Task的stack是B A,若是咱们回到Home,启动另外一个Application的Activity C,若是在C中启动B,则系统会将以前的Task Stack放到前台。这时用户看到的就是B。当按back时返回的是B的前一个Activity A.再back时退出前一个stack,回到当前的stack,即C。app

考虑另外一种状况,B依旧是SingleTask的. 在一个Application的Task Stack中有C B A,而后在另外一个Application中启动B。这时会发生什么?.net

答案是:系统会把前一个Task放到前台,可是它的stack已经变成B A,C已经被系统丢弃了。blog

总结:一、SingleTask的Activity只能在一个Task中,系统老是能找到一个已经存在的Activity;文档

二、当在其余app中调用(或者在同一个activity stack中调用)某个singleTask的Activity时,须要注意:系统会把这个Activity之上的activity都清空,并将它所在的Task Stack置于前台,可能会致使其余APP的状态丢失。例如activity statck有两个SingleTask的B A,若是从B切换到A,则B会从栈顶清除,只剩下A。get

补充一下singleInstance的感觉:it

single instance有点像single task,它老是一个activity占据一个task stack。在同一个app中,A->B,会有两个stack,B在前,A在后,若是此时B->C,会出现如下状况:io

C总结

A      Bactivity

若是退出C,返回到A,退出A,返回到B

若是是在其余的app中X-B

B  X

若是此时再B->C,则会出现以下:

C B X

返回时依次显示。

adb shell dumpsys activity查看task stack.

最后:推荐某个作出实验的blog http://blog.csdn.net/liuhe688/article/details/6754323

相关文章
相关标签/搜索