1. 说明
我们经常会听到有人说Android内存不足时可能会回收Activity,这个其实是不对的,可能是受了某些官方文档的误导,
而准确的说法应该是这样:
Android在运行的过程中,如果发现内存不足,它会去杀一些后台进程来获取内存,如果后台进程都杀光了,内存还不够,可能会有2种表现:1.发生OOM内存溢出,程序崩溃;2.杀死前台进程,它并没有回收某个Activity或者某些Activity的行为。
2. onSaveInstanceState 和 Activity
我们一般是在onSaveInstanceState()里边保存数据,在onRestoreInstanceState()里边取出数据,应用场景一般是:比如Activity中有EditText输入框,输入内容然后进程被回收,然后再次点击应用,Activity被恢复了。
不需要我们写一行代码,Activity本身就有可以恢复EditText的值,流程就是在进程被回收之前调用onSaveInstanceState()保存数据,在进程启动,Activity重新启动时调用onRestoreInstanceState()方法取出数据即可,或者在onCreate()方法中取出数据即可。
那么接下来我们就来分析下这个过程:
2.1 首先我们启动一个Activity;
2.2 然后按下home键,回到桌面,使前台进程变为后台进程;
2.3 然后由于内存不足杀死我们的进程;
2.4 从桌面打开刚才的进程,Activity会重新启动;
3. 分析以上4个过程所对应的生命周期
3.1 首先我们启动一个Activity:
启动Activity时候,onCreate()方法的参数savedInstanceState为null,执行方法如下:
onCreate() -> onStart() -> onResume()
3.2 然后按下home键,回到桌面,使前台进程变为后台进程:
点击home键,使得app回到桌面,此时调用方法如下:
onPause() -> onSaveInstanceState() -> onStop()
3.3 杀死进程,不会调用任何方法;
3.4 从桌面打开刚才的进程,Activity会重新启动,执行方法如下;
onStart() -> onResume()
3.5 点击返回键,执行方法如下:
onPause() -> onStop() -> onDestroy()
网友评论