前言
读了《Android开发艺术探索》第一章以后,对Activity生命周期有了自己的一些小理解。特此记录
1.生命周期分类
就像书中所说,Activity的生命周期分为两类,一类是典型情况下的生命周期,一类是异常情况下的生命周期
2.关于典型生命周期
值得记录的想法
①onStart
和onStop
是从是否可见的角度来回调的,onResume
和onPause
是从是否可以交互的角度来回调的。
②onPause
不能做一些太耗时的操作。
为什么呢?因为在一个Activity启动另外一个Activity的时候,生命周期是这样的(比如A启动B)
A:onPause B:onCreate B:onStart B:onResume A:onStop
所以如果在onPause
中做了一些太耗时的操作,会影响新Activity的展示。所以不能在onPause
中做重量级的操作
3.关于异常生命周期
3.1 Activity被杀死并重新创建
这个一般就是说的横竖屏切换的时候,Activity会销毁重建。
值得记录的想法
①onSaveInstanceState
的调用时机是在onStop
之前,和onPause
没有必然关系。onRestoreInstanceState
是在onStart
之后。和onResume
没有必然关系。
②当Activity即将被销毁并且有机会重新显示的话,系统才会去调用onSaveInstanceState
。当Activity正常销毁的时候,不会调用。
③如果不想它重新创建,也有办法,就是设置configChanges
属性。比如
android:configChanges="orientation"
就可以防止在屏幕旋转的时候重新创建。
3.2 内存不够了,低优先级的Activity被杀死
值得记录的想法
①Activity有个优先级,前台Activity(比如onResume
阶段的)->可见Activity(比如onStart
阶段的)->后台Activity(比如执行了onStop
阶段的)。
②当内存不足的时候,就会按照这个优先级去杀死Activity所在进程,后续也是通过调用onSaveInstanceState
和onRestoreInstanceState
来恢复数据。
③如果一个进程中没有四大组件在执行,那么这个进程将很快被系统杀死。因此,一些后台工作不适合脱离四大组件而独自运行在后台中,这样进程很容易被杀死。比较好的方法是将后台工作放入Service中从而保证进程有一定的优先级,这样就不会被系统轻易杀死。