任务栈

来源:互联网 发布:网络编程语言,veber 编辑:程序博客网 时间:2024/06/05 16:46

,点桌面图标;
按后退键;
按Home键;
前台任务,后台任务;
四种启动模式会让该activity处于哪个任务;
TaskAffinity属性。

应用:应用名,即是包名;
进程:进程名,默认是包名,或者是手动指定的process属性;PID;UID;TID;
任务:任务名,默认是包名,或者是手动指定的affinity属性;TaskID;

1、当任务处于后台状态的时候,返回栈中所有的Activity都会进入停止状态,但这些Activity在栈中的顺序都会原封不动地保留着。

如何用户将任务切换到后台之后过了很长一段时间,系统会将这个任务中除了最底层的那个Activity之外的其它所有Activity全部清除掉。

2、一个任务在前台,按back键会将顶层activity退栈。如果这个任务只剩最后一个activity,此时按back键,会清空任务栈,此任务栈会被回收。

3、按home键,返回桌面。前台任务会被放到后台;后台任务是哪些也不会变,顺序也不会变;只是给用户增加哪些任务,或者将某些任务放到前台来提供个机会。

4、standard模式的activity:默认情况下,它的TaskAffinity属性是它所属应用的包名。可以手动指定它的TaskAffinity属性。哪个任务栈(根据根Activity的TaskAffinity属性,即任务栈名)启动它,它就放在哪个任务栈,即使它的TaskAffinity属性和那个栈名不同。

singleTop模式的activity:默认情况下,它的TaskAffinity属性是它所属应用的包名。可以手动指定它的TaskAffinity属性。哪个任务栈(根据根Activity的TaskAffinity属性,即任务栈名)启动它,它就放在哪个任务栈,即使它的TaskAffinity属性和那个栈名不同。

singleTask模式的activity:默认情况下,它的TaskAffinity属性是它所属应用的包名。可以手动指定它的TaskAffinity属性。无论什么任务栈启动它,它都会放在和它的TaskAffinity属性相同的任务栈内,如果没有此任务栈,那么系统会新建此任务栈。

singleInstance模式的activity:默认情况下,它的TaskAffinity属性是它所属应用的包名。可以手动指定它的TaskAffinity属性。无论什么任务栈启动它,它都会放在和它的TaskAffinity属性相同的任务栈内,如果没有此任务栈,那么系统会新建此任务栈。
(一个任务栈的taskAffinity属性和栈底的Activity的taskAffinity属性是一致的。比如:当栈底的主Activity的lauchMode属性是standard,此时设置taskAffinity属性为“com.ryg.task1”,那么当点击桌面图标时,就会新建名字为“com.ryg.task1”的任务栈。)

5、任务有“任务名”和“任务ID”,两个任务任务名可能相同,但是TaskID肯定不同。比如启动一个singleInstance的activity,如果不手动指定TaskAffinity属性,那么会启动另一个包名相同的任务,但TaskID不同。

6、点击APP图标,系统会找到MainActivity,检查以它的taskAffinity属性为名的任务存不存在:
如果存在,会把它放置前台。同时,如果MainActivity的启动模式是standard、singleTop,那么仅仅会将这个任务栈放置到前台,不会将MainActivity压栈;如果MainActivity的启动模式是singleTask、singleInstance,那么不仅会将这个任务栈放置到前台,而且会将MainActivity压栈,并行使相应singleTask或者singleInstance的特性;
如果不存在,那么会新建任务,并将Activity压栈。

7、关于allowTaskReparenting,我试了一下:
无论应用B的主activity的launchMode是什么,点击桌面图标时,都不会将此主activity压栈,只会将应用A中的那个本属于应用B的activity放回来。

这个貌似也是一个规律:点击桌面图标新建任务栈时,如果外面有要回家的activity,那么此应用的主activity就不会压栈。

还有一种情况:当activity都回来后,再按home键,再点桌面图标,如果主activity的启动模式是singleTask或者singleInstance,那么会将回来的那些activity全部弹栈,只剩下主activity。


查看前台activity,还能查看它所属的任务栈,以及这个任务栈中activity的数量:
adb shell dumpsys activity

原创粉丝点击