android 任务栈的管理

来源:互联网 发布:阿里云cdn多少钱 编辑:程序博客网 时间:2024/04/30 00:07

在进行android开发时如果不对android任务栈进行充分的管理,则在app运行过程中将会产生各种莫名其妙的问题,下边来对android任务栈进行必要的解释:

1,一般app的入口点只有一个,就是activity属性为MAIN和LAUNCHER的activity,一个activity有4种启动方式,分别是standard,singleTop,singleTask,singleInstance。

(1)standard:可以实例化多次,可以存在不同的task中,可以重复堆叠;

(2)singleTop:在一个task栈中可以有多个实例,但是但栈顶有相同的activity时不会创建新实例,调用onNewIntent方法启动该activity;

(3)singleTask:app内调用该activity时,如果该activity已经没有实例化,将会在本app内的task中实例化;如果已经实例化,则会将此activity所在的task栈中其上的activity全部销毁,这样activity就自动调整到task栈栈顶了,然后调用onNewIntent方法。当其他app调用该activity时,如果没有实例化,则创建新的task栈并实例化后入栈,,如果已经实例化,同样是销毁此activity所在的task栈中其上的所有activity。总之就是:在一个task栈中,如果设置activity为singleTask属性时,启动此activity时不允许其他activity在其之上。

(4)singleInstance:独自在一个task栈中。

2,任务栈清理属性

(1)默认情况下,一个任务栈在后台常驻一段时间后,系统会将这个任务栈中除此任务栈中根activity外的所有activity清楚掉,所以当此任务栈再回到前台时就只会显示此任务栈中的根activity了。

(2)alwaysRetainTaskState属性:如果将根activity的这个属性设置为“true”,一旦其所在任务栈切换到后台,即便很长一段时间,系统也不会对其清理;

(3)ClearTaskOnLaunch属性:如果将根activity的这个属性设置为“true”,一旦其所在的任务栈切换到后台一段时间,系统就会对其管理,清除此task栈中除根activity之外的activity。

(4)finishTaskOnLaunch属性:如果将根activity的这个属性设置为“true”,一旦其所在的任务栈切换到后台一段时间,系统会直接清除掉这个task栈中的所有activity;

3,多任务栈设计

(1)activity属性中有一个taskaffinity属性,设置这个属性后,可以使几个activity共用一个task栈,进而调整整个app中activity的跳转流程。

0 0
原创粉丝点击