Android中的Activity启动模式,你了解多少?

移动开发 Android
启动模式可以通过在AndroidManifest.xml文件中的标签的android:launchMode属性来指定。不同的启动模式可以满足不同的业务需求,例如在需要单例模式的场景下可以使用singleInstance启动模式。

模式介绍

Activity的启动模式是指在启动一个新的Activity时,该Activity如何与任务栈中的其他Activity进行交互的规则。Android中有四种主要的Activity启动模式,它们分别是:

  1. standard(标准模式):每次启动一个Activity时,系统都会创建一个新的实例,并放入任务栈中。无论这个Activity是否已经存在,都会创建一个新的实例。
  2. singleTop(单顶部模式):当启动的Activity已经位于任务栈的顶部时,不会创建新的实例,而是直接使用已经存在的实例。如果不位于顶部,则会创建新的实例。
  3. singleTask(单任务模式):系统会检查任务栈中是否已经存在该Activity的实例,如果存在,则将该实例之上的所有Activity移出栈,使得该实例成为栈顶。如果不存在,则会创建一个新的实例。
  4. singleInstance(单实例模式):该模式下的Activity会单独放在一个新的任务栈中,且该任务栈中只有这一个Activity。其他应用无法与其共享任务栈。

启动模式可以通过在AndroidManifest.xml文件中的标签的android:launchMode属性来指定。不同的启动模式可以满足不同的业务需求,例如在需要单例模式的场景下可以使用singleInstance启动模式。

设置方式

「静态方式:」

通过在AndroidManifest.xml文件中的标签中设置android:launchMode属性来设置Activity的启动模式。

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

「动态方式:」

通过设置启动的Activity的flag制动启动模式

Intent intent = new Intent();
intent.setClass(this, MainActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);

使用场景

  1. 「standard」:

场景:一般的应用程序界面跳转

示例:从一个Activity跳转到另一个Activity,每次都创建新的实例

  1. 「singleTop」:
  • 场景:需要频繁跳转到同一个Activity,并且不希望重复创建实例

  • 示例:从Activity A跳转到Activity B,如果Activity B已经位于栈顶,则不创建新实例,直接使用已存在的实例

  1. 「singleTask」:

  • 场景:需要确保整个应用中只有一个该Activity的实例

  • 示例:应用的主界面,或者一个需要独立任务栈的特殊界面

  1. 「singleInstance」:

  • 场景:需要将该Activity放置在一个新的任务栈中,并且确保整个系统中只有一个该Activity的实例

  • 示例:一个需要独立任务栈的特殊界面,比如来电界面或者闹钟提醒界面

这些启动模式可以根据应用的需求来灵活选择,以达到最佳的用户体验和应用性能。


责任编辑:武晓燕 来源: 沐雨花飞蝶
相关推荐

2014-05-27 15:36:01

AndroidActivity启动模式

2021-12-09 07:47:58

Flink 提交模式

2023-10-29 08:35:47

AndroidAOP编程

2023-05-06 08:53:13

2020-03-02 14:55:02

JavaBigDecimalAPI

2016-08-17 10:24:28

2016-03-24 14:02:05

ActivityAndroid启动

2017-08-03 10:25:26

AndroidActivity

2023-02-24 14:46:32

Java线程池编程

2021-08-11 08:44:25

云计算混合云云网协同

2023-12-11 13:59:00

YieldPython生成器函数

2015-11-09 10:44:37

DevOpsIT运维

2023-11-09 08:22:38

2020-03-25 08:47:22

智能边缘边缘计算网络

2021-08-11 17:15:17

AndroidActivity场景

2012-12-27 10:58:24

KVMKVM概念

2023-10-25 08:17:06

Lite模式代理类

2021-06-06 18:22:04

PprofGopher逻辑

2019-08-07 17:18:18

云计算云原生函数

2023-09-07 10:26:50

接口测试自动化测试
点赞
收藏

51CTO技术栈公众号