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 指定启动模式:
2.通过在 Intent 中设置标志位来为 Activity 指定启动模式:
设置常用的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栈中。
这些都是一些属于基础的知识,在面试的时候会出现在笔试、或者面试官随口一问的情况,需要你自信流利地回答的一个常见问题。
接下来我们了解一下。
任务栈是什么
任务栈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面试02-Activity启动模式 及 Intent Flags 与 栈 的关联分析
- Android基础相关面试问题-activity面试问题(生命周期,任务栈,启动模式,跳转协议)
- android面试01—Android中Activity启动模式详解
- Android面试——Activity的四种启动模式
- Android中的Activity四种启动模式(launchMode)(面试必问)
- android83 Activity的生命周期,启动模式,返回时传递数据
- Android08--Android之Activity的四种启动模式
- Android总结篇系列:Activity启动模式(lauchMode)
- 《Android 开发艺术探索》读书笔记二 Activity的启动模式(launchMode)
- Android入门:Activity四种启动模式
- Android开发艺术探索---第一章activity启动模式之自我总结
- # Android中Activity四种启动模式和taskAffinity属性详解 #(4)
- Android中Activity四种启动模式和taskAffinity属性详解
- android 关于activity四种启动模式u及一些常用的flags的 笔记
- Android中Activity启动模式详解
- Android-Activity的启动模式
- Android 中 Activity 启动模式
- Android 之Activity启动模式之 lauchMode
- Android基础知识_Activity标准启动模式示例
- Android中Activity四种启动模式和taskAffinity属性详解