模式介绍
Activity的启动模式是指在启动一个新的Activity时,该Activity如何与任务栈中的其他Activity进行交互的规则。Android中有四种主要的Activity启动模式,它们分别是:
- standard(标准模式):每次启动一个Activity时,系统都会创建一个新的实例,并放入任务栈中。无论这个Activity是否已经存在,都会创建一个新的实例。
- singleTop(单顶部模式):当启动的Activity已经位于任务栈的顶部时,不会创建新的实例,而是直接使用已经存在的实例。如果不位于顶部,则会创建新的实例。
- singleTask(单任务模式):系统会检查任务栈中是否已经存在该Activity的实例,如果存在,则将该实例之上的所有Activity移出栈,使得该实例成为栈顶。如果不存在,则会创建一个新的实例。
- 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);
使用场景
- 「standard」:
场景:一般的应用程序界面跳转
示例:从一个Activity跳转到另一个Activity,每次都创建新的实例
- 「singleTop」:
场景:需要频繁跳转到同一个Activity,并且不希望重复创建实例
示例:从Activity A跳转到Activity B,如果Activity B已经位于栈顶,则不创建新实例,直接使用已存在的实例
「singleTask」:
场景:需要确保整个应用中只有一个该Activity的实例
示例:应用的主界面,或者一个需要独立任务栈的特殊界面
「singleInstance」:
场景:需要将该Activity放置在一个新的任务栈中,并且确保整个系统中只有一个该Activity的实例
示例:一个需要独立任务栈的特殊界面,比如来电界面或者闹钟提醒界面
这些启动模式可以根据应用的需求来灵活选择,以达到最佳的用户体验和应用性能。