https://blog.youkuaiyun.com/pihailailou/article/details/78545391 参考
AMS的主要功能
- 统一调度Activity
- 进程管理
- 内存管理
AMS中相关的一些配置变量
static final int KEY_DISPATCHING_TIMEOUT = 5*1000;//按键无响应的超时时间,这是google的标准,国内的联想手机大部分按照这个标准设计,华为手机不是按照这个标准
static final int MAX_RECENT_TASKS = 20;//AMS记录的activity的最大数量,超过20则会舍弃最早记录的Activity
static final int BROADCAST_TIMEOUT=10*1000;//广播超时时间
final ArrayList<PendingActivityLaunch> mPendingActivityLaunches = new ArrayList<PendingActivityLaunch>();//暂时保存客户端请求
static final int PAUSE_TIMEOUT=500;//AmS通知应用进程暂停指定的Activity,AmS的忍耐是有限的,只有500毫秒。如果应用进程在该常量时间内还同有停止,AmS就是强制暂停关闭该Activity。这就是为什么应用程序设计时,不能在onPause()不能做过多事情的原因。
实验1:在onPause中做Thread.sleep(5000)处理,按Home退出正常,5S后出现onPause日志,如果5S之内再次打开Activity会出现黑屏现象,得出结论不建议在onPause中做耗时处理。
实验2:在onPause中做异步处理耗时操作如保存数据,BACK键直接销毁Activity异步操作也随之销毁,HOME键异步会执行,得出结论不建议在onPause中做数据保存等操作处理。
Activity的启动模式
Stardard:普通模式,每次启动都会创建Activity实例,放入栈顶中
SingleTop:如果栈顶存在当前实例则不需要创建,否则创建实例并且放入栈顶,如当前栈为ABCD启动B后栈顺序为ABCDB
SingleTask:如果栈中存在当前实例则不需要创建,否则创建实例,如当前栈为ABCD启动B后栈顺序为AB
SingleInstance:在一个新栈中创建实例,并让多个应用恭喜该栈中的Activity实例,任何应用激活Activity时都会调用该实例( 会调用实例的 onNewIntent() )。其效果相当于多个应用共享一个应用,不管谁激活该 Activity 都会进入同一个应用中。该模式下,不会再有新的Acitvity实例压入到栈里面,其它地方和'singleTask'一样。这意味着,栈中只有唯一的一个Activity实例。这是一个非常特殊的模式,这只能用在只有唯一的一个Activity的程序中。
Activity的各个生命周期
启动MainActivity
01-01 08:21:09.657 7273-7273/cn.sample.dagger D/===MainActivity: onCreate
01-01 08:21:09.753 7273-7273/cn.sample.dagger D/===MainActivity: onStart
01-01 08:21:09.753 7273-7273/cn.sample.dagger D/===MainActivity: onPostCreate
01-01 08:21:09.754 7273-7273/cn.sample.dagger D/===MainActivity: onResume
01-01 08:21:09.757 7273-7273/cn.sample.dagger D/===MainActivity: onPostResume
从MainActivity启动SecondActivity
01-01 08:21:56.872 7273-7273/cn.sample.dagger D/===MainActivity: onPause
01-01 08:21:56.947 7273-7273/cn.sample.dagger D/===SecondActivity: onCreate
01-01 08:21:56.980 7273-7273/cn.sample.dagger D/===SecondActivity: onStart
01-01 08:21:56.981 7273-7273/cn.sample.dagger D/===SecondActivity: onPostCreate
01-01 08:21:56.982 7273-7273/cn.sample.dagger D/===SecondActivity: onResume
01-01 08:21:56.982 7273-7273/cn.sample.dagger D/===SecondActivity: onPostResume
01-01 08:21:57.210 7273-7273/cn.sample.dagger D/===MainActivity: onCreateDescription
01-01 08:21:57.213 7273-7273/cn.sample.dagger D/===MainActivity: onSaveInstanceState
01-01 08:21:57.213 7273-7273/cn.sample.dagger D/===MainActivity: onStop
SecondActivity界面按返回键
01-01 08:24:43.672 7273-7273/cn.sample.dagger D/===SecondActivity: onPause
01-01 08:24:43.722 7273-7273/cn.sample.dagger D/===MainActivity: onRestart
01-01 08:24:43.723 7273-7273/cn.sample.dagger D/===MainActivity: onStart
01-01 08:24:43.724 7273-7273/cn.sample.dagger D/===MainActivity: onResume
01-01 08:24:43.724 7273-7273/cn.sample.dagger D/===MainActivity: onPostResume
01-01 08:24:43.856 7273-7273/cn.sample.dagger D/===SecondActivity: onStop
01-01 08:24:43.857 7273-7273/cn.sample.dagger D/===SecondActivity: onDestroy
启动一个Activity的完整流程