Activity四种启动模式

Activity启动方式有四种,分别是:

standard

默认模式,可以不用写配置。在这个模式下,都会默认创建一个新的实例。因此,在这种模式下,可以有多个相同的实例,也允许多个相同Activity叠加.

singleTop

可以有多个实例,但是不允许多个相同Activity叠加。即,如果Activity在栈顶的时候,启动相同的Activity,不会创建新的实例,而会调用其onNewIntent方法

singleTask

只有一个实例。在同一个应用程序中启动他的时候,若Activity不存在,则会在当前task创建一个新的实例,若存在,则会把task中在其之上的其它Activity destory掉并调用它的onNewIntent方法。
如果是在别的应用程序中启动它,则会新建一个task,并在该task中启动这个Activity,singleTask允许别的Activity与其在一个task中共存,也就是说,如果我在这个singleTask的实例中再打开新的Activity,这个新的Activity还是会在singleTask的实例的task中。

singleInstance

只有一个实例,并且这个实例独立运行在一个task中,这个task只有这个实例,不允许有别的Activity存在。

<activity  
    android:name=".MainActivity"  
    android:launchMode="sigleTop" />  

Android中Activity启动模式(Launch Mode)定义了Activity在任务栈中的行为方式。共有四种启动模式:`standard`、`singleTop`、`singleTask`和`singleInstance`,它们决定了Activity实例的创建方式、任务栈的归属以及如何响应启动请求。 ### `standard` 模式 这是默认的启动模式。每次启动该模式的Activity时,都会创建一个新的实例,并将其压入启动它的Activity所在的任务栈中。即使该Activity已经在栈顶,也不会复用,而是新建一个实例[^4]。 ### `singleTop` 模式 如果目标Activity已经位于任务栈的栈顶,则不会创建新的实例,而是直接使用栈顶的实例,并调用其`onNewIntent()`方法。但如果该Activity不在栈顶,或者任务栈不存在,则仍然会创建新的实例。此模式适用于某些需要避免重复创建栈顶实例的场景,例如通知栏点击跳转。 ### `singleTask` 模式 这种模式的Activity在系统中只会存在一个实例。系统会在启动该Activity时查找是否存在一个任务栈中已经包含该实例。如果存在,则不会创建新实例,而是将该任务栈带到前台,并结束位于该Activity实例之上的所有其他Activity,使其位于栈顶;如果不存在,则会创建一个新的任务栈并放入该实例作为根Activity[^3]。需要注意的是,官方文档虽然指出该模式的Activity通常作为任务的根Activity,但实际行为取决于任务栈的配置和启动上下文。 ### `singleInstance` 模式 该模式的Activity在整个系统中只有一个实例,并且该实例独立存在于一个单独的任务栈中。任何应用启动该Activity时,都会使用这个全局唯一的实例,并将其任务栈置于前台。适用于需要全局共享的界面,例如全局设置或登录界面。由于该模式的Activity独占一个任务栈,后续的Activity启动不会压入该栈中,而是进入其他任务栈。 ## 启动模式的区别总结 - **实例唯一性**:`standard`和`singleTop`允许在多个任务栈中存在多个实例;`singleTask`确保一个系统内仅有一个实例;`singleInstance`确保全局唯一实例并独立任务栈。 - **任务栈行为**:`standard`和`singleTop`的实例压入启动它们的Activity所在任务栈;`singleTask`可能复用已有任务栈或新建任务栈;`singleInstance`始终位于独立任务栈。 - **复用机制**:`standard`始终新建实例;`singleTop`仅在栈顶时复用;`singleTask`在系统中复用;`singleInstance`全局复用。 ### 示例代码:在AndroidManifest.xml中设置启动模式 ```xml <activity android:name=".MainActivity" android:launchMode="singleTask" /> ``` ### 示例代码:通过Intent启动不同模式的Activity ```java Intent intent = new Intent(this, TargetActivity.class); startActivity(intent); ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值