一起看看 Activity启动模式

Activity启动模式

Activity启动模式定义了Activity被启动时的行为,即怎样启动、启动方式等。Activity启动模式可以在标签中通过设置android:launchMode属性来定义,如果没有指定,系统将使用默认的模式。Activity启动模式是Android系统中十分重要的一部分,它与任务、栈、堆栈回退等概念都有着紧密的关系。

4种启动模式

在Android中,Activity的启动模式有以下4种:

standard(标准模式)

singleTop(栈顶复用模式)

singleTask(栈内复用模式)

singleInstance(单实例模式)

standard模式

standard模式是Activity的默认启动模式,如果没有特别指定,系统将使用这种启动模式。每次通过Intent启动一个Activity,都会创建一个新的Activity,并且将新Activity压入任务栈中。如果多次启动同一个Activity,将会有多个Activity实例存在(taskAffinity属性除外)。

以下代码为指定standard模式的代码:

android:name=".MainActivity"

android:launchMode="standard">

singleTop模式

singleTop模式是指如果要启动的Activity的实例已经位于任务栈顶部,那么不会重新创建新的实例,而是复用栈顶的实例。如果已经存在于栈中但不在栈顶,将会创建新的实例并将它放置于栈顶。这种模式主要用来避免重复创建Activity实例,从而提高应用程序的性能。

以下代码为指定singleTop模式的代码:

android:name=".MainActivity"

android:launchMode="singleTop">

singleTask模式

singleTask模式是指如果要启动的Activity的实例已经存在于任务栈中,那么不会重新创建实例,而是复用已经存在的实例,这个实例会被放置在栈顶。如果不存在该实例,将会重新创建新的实例,并放在栈顶,但是在此之前会先回收栈顶的Activity。通过该模式启动的Activity将会位于单独的任务栈中,可以保证该任务栈中的Activity实例只有一个。在不同任务栈中的Activity实例可以同时存在。

以下代码为指定singleTask模式的代码:

android:name=".MainActivity"

android:launchMode="singleTask">

singleInstance模式

singleInstance模式是指如果Activity的实例已存在于系统中,启动该Activity不会经过onCreate()方法,系统直接复用该Activity的实例。如果不存在该实例,系统会创建一个新的任务栈,然后把该Activity的实例放入新的任务栈中,该任务栈中只有一个Activity的实例,如果在该模式下启动其他Activity,新的Activity将会在该任务栈中创建实例。

以下代码为指定singleInstance模式的代码:

android:name=".MainActivity"

android:launchMode="singleInstance">

总结

Activity启动模式是Android系统的重要组成部分,不同的启动模式适用于不同的场景,能够帮助开发者在不同的场景下更灵活地使用Activity。Android提供了4种Activity启动模式,每种模式都有各自的特点和使用场景,开发者根据具体情况选择合适的启动模式使用。