天天看点

android任务栈

1.启动任务栈

    第一种,动作设置为“android.intent.action.main”,类别设置为“android.intent.category.launcher”,

可以使这个act(activity)实例称为一个任务栈的入口,拥有这种类型的intent-filter的act类型的图

表和名字也会显示在application launcher中。

    第二种,即是采用用“singleinstance”模式,另外开个一个唯一act的栈,

提示:如果“singleinstance”模式同时还加上上面的类型,则当前act也是一个单独act的任务栈,而应用其他act会组成另外一个任务栈

2.启动模式

<activity>标签的launchmode属性可以设置为四种不同的模式:

“standard”   :(默认模式)反复创建新实例,如a-b-a-c-d-b-a…依次随便加

“singletop” : 避免出现类似a-b-c-d-d…,如d采用"singletop",则是a-b-c-d 

“singletask”:    如a采用"singletask",则在“standard”中类似a-b-c-d-a任务栈,在“singletask”只会剩下a,bcd都会被回收

“singleinstance” :  此模式你另外开个一个任务栈,且单独只有一个act

3.清理任务栈

默认:如果一个任务栈在很长的一段时间都被用户保持在后台的,那么系统就会将这个任务栈中除了根act以外的

其它所有act全部清除掉。当用户再将任务栈切换到前台,则只能显示根activity了。

    1)alwaysretaintaskstate属性

    如果将根act的alwaysretaintaskstate属性设置为“true”,则即便一个任务栈在很长的一段时间都被用户

保持在后台的,系统也不会对这个任务栈进行清理。

    2)cleartaskonlaunch属性

    如果将根act的cleartaskonlaunch属性设置为“true”,那么只有这个任务栈切换到了后台,那么系统就会

将这个任务栈中除了根act以外的其它所有act全部清除掉。即和alwaysretaintaskstate的行为完全相反。

    3) finishontasklaunch属性

    这个属性的行为类似于cleartaskonlaunch,但是此属性作用于单个的act对象,而不是整个任务栈。当这个

任务栈切换到了后台,这个属性可以使任务栈清理包括根act在内的任何act对象。 

4.还复杂点可以加入亲属关系taskaffinity

总结:简单的说,即是开一个(或几个)任务栈,在每个任务栈上添加act,遇到“singletask”的则回到之前存在的act,把夹在中间的act全部回收

继续阅读