一、生命周期
正常情况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 开发者艺术探索读书笔记】
网友评论