1.生命周期
0_1314838777He6C.gifonCreate:第一个调用,进行初始化工作,应用被杀死后重启才会再运行。
onStart:正在启动,Activity
onRestart:重新启动。一般是从不可见到可见状态。处于一种已经出现但是不能交互,不能看到的混沌状态。
onRsume:这时Activity已经在前台了。
onPause:正在停止,可以做一点微小的工作。不能续太多时间。
onStop:正式停止,可以做一些比较大的工作,但也不能续很多时间。
onDestory:正式被续了,这里需要交代后事。
——留得生前身后名,可怜白发生
特定情况:
- 第一次启动,onCreate-onStart-onResume
- 打开新的Activity或切换到桌面,onPause-onStop
- 回到原Activity,onRestart-onStart-onResume
- back键: onPause-onStop-onDestory
- 回收后再打开,会从新走1的路程,但是不是所有过程都一样。
要点:
- onResume和onPause是用于应用是否在前台。onStop和onStart是在应用是否可见
- 打开新的Activity是,是先执行旧Activity的onPause后在执行新的Activity的onResume。因此onPause不能执行重量级操作,为了是让新的Activity尽快到前台。
——年年岁岁花相似,岁岁年年人不同。
异常声明周期
1.资源相关的系统配置发生改变导致Activity被杀死后重建。
状况:如屏幕旋转
默认状态(只有异常状态下,正常退出不会调用),下Activity会先执行onSaveInstanceState后onDdestory,后使用onRestoreInstanceState 的内容进行重建。onSaveInstanceState在onStop之前调用,但是与onPause没有明显的先后顺序,故在onPause中释放资源要慎重。onRestoreInstanceState调用是在onStart之后。
onSaveInstanceState中,系统会自动保存当前的Activity的视图(文本框输入的数据,listView的滚动位置等)
保存顺序:Activity(onSaveInstanceState)-委托Window-上册ViewGroup-一一通知各个子元素保存。恢复也是类似。
注:使用onSaveInstanceState保存的数据时,可以在onCreate中使用,这时需要判定 Bundle saveInstanceState是否为空。二onRestoreInstanceState时不需要。
2. 内存不足导致第优先级的Activity被杀死
Activity优先级:前台Activity,前台非可见(比如弹出一个dialog后,可见但是无法交互),后台(被暂停)。如果一个进程没有四大组件运行,则会很快被杀死,保证进程比较好的方法就是放入Service 从而保证优先级不被杀死。
3. 不在配置变更的时候重启Activity
一般是指定android:configChanges 的值,比如最常用三个locale,orientation,keyboardHidden。指定后可以在对应状态下不进行Activity重建。
网友评论