美文网首页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