您的位置:首页 > 职场人生

Android面试之Activity启动模式

2016-09-09 17:18 232 查看
Activity的启动模式,是我们Android开发经常用到,也是面试官经常随口要你回答的一个点。

接下来我们了解一下。

任务栈是什么

任务栈Task,是 一种存放Activity实例的容器,他是以栈的形式进行存放,也就是以先进后出,压栈和出栈。

在启动Application的时候,系统会默认创建一个Task进行Activity的存放,默认启动Activity会放在同一个栈,新启动的Activity会被压入默认的栈中,并显示它。当用户finish界面或者按下后退按钮时,这个Activity就会出栈。

当按Home键、并启动另一个应用的时候,我们本身的栈就会移动到后台,成为后台任务栈,然而新启动到前台的应用,他的Task被成为前台任务栈。

Android的四种启动模式:

standard:标准默认模式

1.例如A Activity启动B Activity,B Activity创建在A Activity的任务栈中;

2.每次启动一个Activity都会创建新的实例,无论这个Activity是否已存在任务栈中;

singleTop:栈顶复用模式

例如A Activity启动B Activity,判断A的任务栈栈顶是否存在B这个实例,如果存在那就不创建新的

的B Activity而是直接引用这个栈顶的实例B Acitivity。如果不存在那就创建新的B Activity.

singleTask:栈内复用模式

当你要创建的Activity不存在栈中,那就如常创建。若存在栈中那不会重新生成一个新的实例,会使用使用,

并且将该Activity之上的所有Activity从该栈中移除,使得你要创建的Activity处于栈顶。

singleInstance:单实例模式

该模式具有singleTask的所有特性外,还具有属于自己的特性。那是该模式的Activity会单独存在一个任务栈中

不与其他Activity共存在同一个任务栈中。他可以理解成在系统范围中唯一实例,如果在当前栈中找不到,

会在系统的其他栈查找,找到直接使用,否则如刚刚所说的创建属于自己的栈。

两种方法给 Activity 指定启动模式:

1.通过 AndroidMenifest 给 Activity 指定启动模式:

<activity android:name=".SecondActivity"

android:launchMode="singleTask"/>


2.通过在 Intent 中设置标志位来为 Activity 指定启动模式:

Intent intent = new Intent(MainActivity.this, SecondActivity.class);

intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);

startActivity(intent);


设置常用的Intent的Flag

FLAG_ACTIVITY_NEW_TASK:

使用一个新的Task来启动一个Activity,但启动的每个Activity都将在一个新的Task中。

FLAG_ACTIVITY_SINGLE_TOP:

这个标记位的作用是为 Activity 指定 “singleTop” 启动模式。

FLAG_ACTIVITY_CLEAR_TOP:

这个标记位的作用是为 Activity 指定 “singleTask” 启动模式。

FLAG_ACTIVITY_NO_HISTORY

Activity使用这个模式启动,当该Activity启动其他Activity,该Activity就会消失了,不会保留在Activity栈中。

这些都是一些属于基础的知识,在面试的时候会出现在笔试、或者面试官随口一问的情况,需要你自信流利地回答的一个常见问题。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  面试 android