Activity详细解读
-
典型情况下生命周期分析:
onCreate(): 表示Activity正在被创建,这是生命周期的第一个方法,在这个方法里可以做一些初始化的操作,比如setContentView去加载界面布局等。
onRestart():当前Activity由不可见到可见状态会回调,这种情形一般是用户行为,比如,用户按下HOME键然后又切换到这个Activity。
onStart(): 表示Activity正在被启动,这时候Activity还没有被显示出来,没办法和用户交互。
onResume(): 表示当前Activity已经出现在前台并开始活动。
onPause()::当前Activity正在停止,注意不能进行耗时操作。
onStop():表示Activity即将停止,可以做一些轻量级的回收工作,同样注意不能耗时。
onDestroy():Activity即将被销毁,这是生命周期的最后一个回调,可以做一些回收工作和最终的资源释放。正常情况下Activity的生命周期只有上面7种,下图描述了Activity的切换过程。
-
异常情况下Activity生命周期分析
默认情况下,如果Activity不做处理,那么当系统配置发生改变后,Activity就会被销毁并且重建
Activity->意外情况->onSaveInstanceState->onPause->onStop->onDestory
当Activity重新创建时:
onCreate->onRestoreInstanceState
由于Activity被异常终止,系统会回调onSaveInstanceState来保存当前Activity的状态,这个调用只出现在Activity被异常终止的时候,正常销毁不会调用同时,加入onConfigChanges 属性可以避免不必要的重建。
-
Activity的四种启动模式分析
standard,singleTop,singleTask,singleInstance1.standard:默认模式,每次启动Activity都会重新创建一个实例,不管Activity是否存在
标准模式的Activity默认会进入启动它的Activity的栈中。所以当使用ApplicationContext去启动stander模式的Activity会有问题(ApplicationContext非Activity类型),所以此时要为启动的Activity指定 FLAG_ACTIVITY_NEW_TASK标志位,这时启动的时候就会创建一个任务栈,实际上这种模式可以理解为singleTask。
2.singleTop:栈顶复用模式,如果新Activity已经位于栈顶,那么此Activity不会别创建
如果新的Activity没有在栈顶,那么依然会被创建。
3.singleTask:栈内复用模式,只要Activity在栈内存在,多次启动都不会重新创建该Activity。
注意singleTask默认具有clearTop的效果
4.singleInstance:加强版singleTask,具有此种模式的Activity只能单独的位于一个任务栈
当要启动的Activity具有此种模式,系统会为其创建一个新的任务栈,此Activity单独运行在这个任务栈中,由于栈内复用的特征,后续的请求均不会创建新的Activity,除非这个任务栈被系统销毁了。
必须配合 taskAffinity属性使用才会有效果。
onNewIntent
大概意思是当Activity被设以singleTop启动,当需要再次响应此Activity启动需求时,会复用栈顶的已有Activity,还会调用onNewIntent方法。
并且,再接受新发送来的intent(onNewIntent方法)之前,一定会先执行onPause方法。