Activity的launchMode和任务栈

本文详细讲解了Android Activity的四种启动模式(standard、singleTop、singleTask、singleInstance),阐述它们的区别,如何决定实例数量,以及适用的场景和用例。特别关注了实例创建和Intent处理方式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Activity的launchMode有四种

  • standard
  • singleTop
  • singleTask
  • singleInstance
    默认的加载模式是standard。

四种加载模式主要分为两大类,standard和singleTop为一类,singleTask和singleInstance为一类。

使用standard或singleTop启动模式的Activity可多次进行实例化,实例可归属任何任务,并且可位于任务栈的任何位置。

使用singleTask和singleInstance启动模式的Activity,设备一次只能有一个实例。

standard和singleTop有一处不同,每次“standard” Activity有新的Intent时,系统都会创建新的类实例来响应该Intent,每个实例处理单个Intent。同样的,系统也会创建新的"singleTop"Activity实例来响应新的Intent,但是如果目标任务栈的栈顶已有一个Activity实例,则该实例会(通过调用onNewIntent())接收新的Intent;此时不会创建新实例。在其他情况下(例如,如果“singleTop
”Activity的某个现有实例虽在目标任务内,但未处于任务栈顶部,或者虽然处于任务栈顶部,但不在目标任务栈中),系统会创建新的实例并将其送入任务栈中。

“singleTask”和“singleInstance”模式同样只有一处不同:“singleTask”Activity允许其他Activity成为其任务的一部分,其他Activity(必然是“standard和“singleTop”Activity)可以启动到该任务中。另一方面,“singleInstance”Activity不允许其他Activity成为其任务的一部分。它是任务中唯一的Activity。如果它启动另一个Activity,则系统会将该Activity分配给其他任务。

用例启动模式多个实例注释
大多数Activity的正常启动“standard”系统在目标任务中创建新的实例,并向其传送Intent
“singleTop”视情况而定如果目标任务的顶部已存在Activity实例,则系统会通过调用该实例的onNewIntent()方法向其传送Intent,而非创建新的Activity实例。
专用启动(不建议在一般情况下使用)“singleTask”系统会在新任务中创建Activity实例并向其传送Intent。不过,如果存在Activity实例,则系统会调用该实例onNewIntent()方法(而非创建新的Activity实例),向其传送Intent。
“singleIntance”与"singleTask"相同,只是系统不会将任何其他Activity启动到包含实例的任务中,该Activity始终是其任务中的唯一Activity
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值