面试题:谈谈你对Activity的四种启动模式,以及任务栈了解多少?

面试题:谈谈你对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实例,则:

  1. 将task内的对应Activity实例之上的所有Activity弹出栈。

  2. 将对应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

你可能感兴趣的:(面试题:谈谈你对Activity的四种启动模式,以及任务栈了解多少?)