Android基础学习(十)—— Activity启动模式

参考自:细谈Activity四种启动模式

一、前提知识1——Intent

显式Intent:

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

隐式Intent:

1)在 AndroidManifest.xml 中配置 标签下 中的内容,可指定当前活动能够响应的 action 和 category(每个Intent只能指定一个action,但却能指定多个category)

<activity android:name=".SecondActivity">
    <intent-filter>
        <action android:name="com.example.activitytest.ACTION_START"/>
        <category android:name="android.intent.category.DEFAULT"/>
    </intent-filter>
</activity>

2)调用

Intent intent = new Intent("com.example.activitytest.ACTION_START");
startActivity(intent);

二、前提知识2——任务栈(Task Stack)/退回栈(Back Stack)

(1)任务栈用来存放用户开启的Activity

(2)在应用程序创建之初,系统会默认分配给其一个任务栈(默认一个),并存储根Activity

(3)同一个Task Stack,只要不在栈顶,就是onStop状态

(4)任务栈的id自增长型,是Integer类型

(5)新创建Activity会被压入栈顶。点击back会将栈顶Activity弹出,并产生新的栈顶元素作为显示界面(onResume状态)

(6)当Task最后一个Activity被销毁时,对应的应用程序被关闭,清除Task栈,但是还会保留应用程序进程(狂点Back退出到Home界面后点击Menu会发现还有这个App的框框。个人理解应该是这个意思),再次点击进入应用会创建新的Task栈。


三、前提知识3——Activity的affinity

(1)affinity是Activity内的一个属性(在ManiFest中对应属性为taskAffinity)。默认情况下,拥有相同affinity的Activity属于同一个Task中

(2)Task也有affinity属性,它的affinity属性由根Activity(创建Task时第一个被压入栈的Activity)决定。

(3)在默认情况下(我们什么都不设置),所有的Activity的affinity都从Application继承。也就是说Application同样有taskAffinity属性

(4)Application默认的affinity属性为Manifest的包名


四、Activity启动模式

Activity会根据自身不同的启动模式,对自身的生命周期方法进行不同的调用

(1)standard(默认启动模式)

Activity的默认启动模式就是 standard

系统不在乎Activity是否已经在返回栈中存在,每次启动都会创建该活动的一个新的实例

在这里插入图片描述


(2)singleTop(栈顶复用模式)
<activity android:name=".TwoActivity"
          android:launchMode="singleTop">
</activity>

如果栈顶Activity是我们要新建的Activity(目标Activity),那么就不会重复创建新的Activity

在这里插入图片描述


(3)singleTask(栈内复用模式)

如果 task 栈内存在目标 Activity 实例,则:

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

2)将对应 Activity 置于栈顶,获得焦点
在这里插入图片描述


(4)singleInstance(全局唯一模式)

在该模式下,系统会为目标 Activity 分配一个新的 affinity(创建一个新的 Task 栈,将目标 Activity 放入新的 Task),并让目标 Activity 获得焦点,新的 Task 有且只有一个 Activity 实例。

如果已经创建过目标 Activity 实例,则不会创建新的 Task,而是将以前创建过的 Activity 唤醒,对应的 Task 设为 Foreground 状态

? 下图中的Activity1是singleTop,Activity2是singleInstance
在这里插入图片描述

image

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值