Activity的4种启动模式
Activity 的启动模式有4种,分别是 standard,singleTop.singleTask.singleInstance。可以在
AndroidMainifest.xml 文件中指定每一个 Activity 的启动模式。一个 Android 应用一般都会有多个 Activity,系统会通过任务栈管理这些 Activity,栈是一种后进先出的集合,当前的Activity 就在栈顶,按返回键,栈顶 Activity 就会退出。Activity 启动模式不同,系统通过任务栈管理 Activity 。
1. Standard 模式
来了就创建
Standard 模式是 Android 的默认启动模式,你不在配置文件中做任何设置,那么这个 Activity 就是 Standard 模式,这种模式下,Activity 可以有多个实例,每次启动 Activity,无论任务栈中是否已经有这个 Activity 的实例,系统都会创建一个新的 Activity 实例。
应用场景:默认模式,大部分情况下,都应该使用这种模式。
2. SingleTop 模式
栈顶单例
SingleTop 模式和 Standard 模式非常相似,主要区别就是当一个 SingleTop 模式的 Activity 已经位于任务栈栈顶,再去启动它时,不会再创建新的实例,如果不位于栈顶,就会创建新的实例。
启动相同 Activity,不会调用 onCreat(),但会调用 onNewIntent (可在此处处理相应逻辑),我们可以在这个函数做相应的处理。
应用场景:避免多次启动 Activity。
3. SingleTask 模式
任务栈单例
SingleTask 模式的 Activity 在同一个 Task 内只有一个实例,如果 Activity 已经位于栈顶,系统将不会创建新的实例,和 SingleTop 模式一样。但 Activity 已经存在但不位于与栈顶时,系统就会把该 Activity 移到栈顶,并把它上面的 Activity 出栈。并且会调用 onNewIntent(),方便业务逻辑处理。
应用场景:首页可以使用该模式。
4. SingleInstance 模式
独栈单例
SingleInstance 模式也是单例的,但和 SingleTask 不同,SingleTask 只是任务栈内单例,系统里是可以有多个 SingleTask Activity 实例的,而 SingleInstance Activity 在整个系统里只有一个实例,启动一 SingleInstance Activity时,系统会启动一个新的任务栈,而且这个任务栈只有他一个 Activity。
SingleInstance 模式并不常用,如果我们把一个 Activity 设置为 SingleInstance 模式,你会发现它启动时会慢一些,切换效果不好,影响用户体验。
应用场景:它往往用于多个应用之间,例如一个电视 launcher 里的 Activity,通过遥控器某个键在任何情况可以启动,这个 Activity 就可以设置为 SingleInstance 模式,当某应用中按键启动这个 Activity,处理完后按返回键,就会回到之前启动它的应用,不影响用户体验。