美文网首页Android面试题解析Android专题
面试题:谈谈你对Activity的四种启动模式,以及任务栈了解多

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

作者: 千夜零一 | 来源:发表于2020-10-14 07:34 被阅读0次

    面试题:谈谈你对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的四种启动模式,以及任务栈了解多

        本文链接:https://www.haomeiwen.com/subject/iioupktx.html