面试题:谈谈你对Activity的四种启动模式,以及任务栈了解多少?
Activity的四种启动模式
- 标准模式(standard)
- 栈顶复用模式(singleTop)
- 栈内复用模式(singleTask)
- 单例模式(singleInstance),也叫“全局唯一模式”。
所需知识:任务栈(Task Stack)
任务栈也叫退回栈(Back Stack),是一种以栈的方式用来放置Activity实例的容器,遵循先进后出(FILO)的原则。启动一个Application(应用程序)的时候,系统会为它默认创建一个对应的任务栈Task,用来放置根Activity。默认启动Activity会放在同一个Task中,新启动的Activity会入栈,并且显示它。按返回键则进行出栈操作,显示当前栈顶的activity(之前的次栈顶位置)。
标准模式(standard)
该模式可以被设定,不在manifest设定时候,Activity的默认模式就是standard。在该模式下,启动的Activity会依照启动顺序被依次压入Task中。通常我们使用的就是默认的这种标准模式。
栈顶复用模式(singleTop)
在该模式下,如果栈顶Activity为我们要新建的Activity(目标Activity),那么就不会重复创建新的Activity。
栈内复用模式(singleTask)
与singleTop模式相似,只不过singleTop模式是只是针对栈顶的元素,而singleTask模式下,如果task栈内存在目标Activity实例,则:
-
将task内的对应Activity实例之上的所有Activity弹出栈。
-
将对应Activity置于栈顶,获得焦点。
单例模式(singleInstance)
在该模式下,我们会为目标Activity分配一个新的affinity,并创建一个新的Task栈,将目标Activity放入新的Task,并让目标Activity获得焦点。新的Task有且只有这一个Activity实例。如果已经创建过目标Activity实例,则不会创建新的Task,而是将以前创建过的Activity唤醒(对应Task设为Foreground状态)
如何设置
在Manifest中设置的(通过launchMode属性设置),这个被称为静态设置。
在Activity代码中动态设置:
intent.setFlags(、、、、、);
常见的几种Flags:
对应singleTop,栈顶复用模式
Intent.FLAG_ACTIVITY_SINGLE_TOP
对应singleTask,栈内复用模式
Intent.FLAG_ACTIVITY_CLEAR_TOP
对应singleInstance,单例模式,全局唯一模式
Intent.FLAG_ACTIVITY_NEW_TASK
网友评论