Activity启动模式

132 阅读1分钟
1、设置启动模式的方式  

方式1:androidManifest指定launchMode

<activity

 android:name=".SingleTopActivity"

 android:launchMode="singleTop" />

方式2:设置Flags

Intent intent = new Intent(this,SingleTopActivity.class);

intent.setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);

startActivity(intent);

设置flags的优先级大于清单文件指定

2、Standard模式

标准模式

A:onCreate -> onStart -> onResume

A打开B:

A: onPause                                  -> onStop

B:        -> onCreate -> onStart -> onResume

B点击返回:

A:        -> onRestart -> onStart -> onResume

B: onPause                                    -> onStop -> onDestory

如果B设置了dialog主题,那么生命周期变为:

A打开B:(不会走A的onStop方法)

A: onPause                                   

B:        -> onCreate -> onStart -> onResume

B点击返回:

A:        -> onResume

B: onPause            -> onStop -> onDestory
3、SingleTop模式

栈顶复用,如果要启动的Activity不位于顶部, 就创建一个新的Activity实例;如果位于顶部就不会创建新的:

image.png

Stardard启动模式:

A:onPause                                      -> onStop

B:        ->  onCreate -> onStart -> onResume

SingleTop启动模式:

onPause -> onNewIntent -> onResume
4、SingleTask模式

栈内复用,如果栈内存再该Activity,就清除栈顶的所有Activity:

image.png

A(设置了SingleTask):      onRestart -> onStart -> onNewIntent -> onResume

B:        -> onDestroy ->   

C: onPause                                                                ->onSop -> onDestroy

可以看出目标Activity顶部的Activity全部销毁,直接走了onDestory方法

5、SingleInstance模式

单独开一个栈,该栈内仅有一个。

现在有三个Activity: A,B(设置了SingleInstance),C,按A -> B -> C打开,打开的流程生命周期和普通的一样;但此时C单独开了一个栈

image.png

从C点击返回,将会直接返回到A:

image.png

A:        -> onRestart -> onStart -> onResume 

B:

C: onPause                                      -> onStop -> onDestroy

A此时点击返回,返回到了B:

image.png

A:onPause                                    -> onStop

B:        -> onRestart -> onStart -> onPause

在B点击返回,此时A先出栈,随后B也出栈:

A:            onDestroy ->

B: onPause ->              onStop -> onDestroy