activity生命周期和启动模式

一、生命周期

activity生命周期和启动模式_第1张图片

正常情况activity启动流程:

启动activity A

activity A onCreate -> activity A onStart -> activity A onResume -> 运行

再启动activity B

activity A onPause -> activity B onCreate-> activity B onStart-> activity B onResume

然后再退回到activity A

 activity B onPause -> activity A onRestart -> activity A onStart -> activity A onResume

按back键退出

onPause->onStop->onDestroy

注意

activity A onPause 之后才会 activity B onResume. 所以不要在onPause里面做太过耗时的操作,否则会导致新界面打开比较慢

activity优先级

前台activity:正在与用户交互的activity,优先级最高。

可见但是非前台activity:优先级次之。

后台activity:已经执行过stop的activity,优先级最低。

当系统内存不足时,系统就会按照activity优先级去杀死目标activity所在的进程,并在后续通过onSaveInstanceState和onRestoreInstanceSate来保存和恢复数据。

二、启动模式(LaunchModel)

standard:标准模式,这个模式下每次启动activity都会创建一个新实例,谁启动了这个activity,那么这个activity就运行在启动他的那个activity的所在栈中。

singleTop:栈顶复用模式,这个模式如果新activity已经在栈顶了,那么activity就不会重新创建,同事onNewIntent会被调用,但是onCreate和onStart不会被重新调用。

singleTask:栈内复用模式,这是一种单实例模式,只要activity在一个栈中存在,那么多次启动activity都不会重新创建实例。如果栈里已经存在该activity,那么该activity会调到栈顶,该activity之前的栈中其他activity都会被弹出。

singleInstance:单实例模式,加强版singleTask,该模式会将activity加入单独一个activity栈中。


隐式调用和显示调用:

显示调用需要明确指定包名和类名,隐式调用通过intentFilter来匹配相应的activity。

隐式调用:

action规则:与IntentFilter的字符串值一模一样

categore规则:只要其中有一个一样就可以匹配

data规则:如果IntentFilter定义了data,那么intent必须要定义可匹配的data

【Android 开发者艺术探索读书笔记】

你可能感兴趣的:(activity生命周期和启动模式)