Android面试之Activity启动模式

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栈中。


这些都是一些属于基础的知识,在面试的时候会出现在笔试、或者面试官随口一问的情况,需要你自信流利地回答的一个常见问题。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值