1.任务栈的介绍
(1)程序一打开就会创建了一个新的任务栈,当前程序的所有Activity都存储在这个任务栈中。
(2)一个任务栈包含一个activity的集合,用户可以有序的和其中的activity进行交互,但只有栈顶的activity才可以和用户进行交互
(3)任务栈可以移动到后台,并且保留了每一个activity的状态,能给用户有序的列它们的任务,并且不丢失他们状态信息
(4)退出程序时,将所有activity清除出栈,程序退出
2.任务栈的缺点
(1)每次打开一个页面就会添加到activity中,程序退出时,需要清除栈中所有activity,任务栈才会被销毁,造成用户需要多次返回才能退出体验差
(2)每次打开一个页面就会添加到activity中,造成数据冗余,重复数据太多,导致内从溢出
3.任务栈的启动模式及应用场景
(1)启动模式(lauchMode)可以决定 :
是否生成新的Activity实例,
是否重用已存在的Activity实例,
是否和其他Activity实例在同一个task里
(2)task是一个具有栈结构的对象,一个task可以管理多个Activity,启动一个应用后就对应一个task
(3)配置启动模式
a. mainfest设置android.lauchMode=“”
b. startActivity的flag
(4)介绍及使用场景
a. standard
默认启动模式,每次都生成新的实例,并位于栈顶
b.singTop
当前activity在栈顶,不生成新的实例
当前activity不在栈顶,生成新的实例。
应用场景:接受通知启动内容显示页面(QQ接到消息弹出Activity)
c.singTask
当前activity在栈内,不生成新的实例,弹出其上所有activity
当前activity不在栈内,生成新的实例
应用场景:适合程序入口点(浏览器主界面,不管从多少个页面启动浏览器,指启动主页面一次,其余都走onNewIntent)
d.singInstance
启用新的栈结构,保证不再有其他Activity进入
退出时,先清除幕前的栈的所有,然后清除另外的栈
应用场景:适合要与程序分离的页面(闹铃提醒,将闹铃提醒与设置分离),不能用于中间页面
此处延伸:栈(First In Last Out)与队列(First In First Out)的区别
todo