美文网首页android基础知识Android开发
android中内存不足及Activity恢复的情况

android中内存不足及Activity恢复的情况

作者: 世道无情 | 来源:发表于2018-04-02 14:53 被阅读58次

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()

相关文章

网友评论

    本文标题:android中内存不足及Activity恢复的情况

    本文链接:https://www.haomeiwen.com/subject/ddyozxtx.html