阅读 362

Android面试专题系列(三):Activity的生命周期

不诗意的女程序媛不是好厨师~ 转载请注明出处,From李诗雨—blog.csdn.net/cjm24848365…

这是一个很老很老的问题,但是每次面试又经常遇到。

我们到底该怎样回答,才比较优雅又全面呢?

1.正常情况下Activity的生命周期。

1.1先说图中的主线.

即先说一个activity从它打开 到它看不见 再到它销毁的完整流程。

在这里插入图片描述
当我去启动一个activity的时候,

  • Activity首先执行的是onCreat()方法,一般来说我们主要在这个方法中进行一些初始化工作,比如说setContentView, setContent, layout, 以及第三方sdk的注册等等。

    当然,我们的初始化工作,还是建议使用延迟加载或者懒加载的方式,我们的onCreat()尽可能还是事情做得少一点,这样我们的应用会启动的快一些。

  • onCreat()完成以后,我们的Activity就会进入onStart()状态。onStart()其实也可以进行一些初始化的工作。(可以注意区别)

  • onStart()执行完以后,界面就可见了,也可以进行交互了,这个时候会走到onResume()方法。onResume()方法主要是用在 我们的activity退入后台又重新恢复的时候,做一些数据恢复或者相关工作的。

  • 此时当我们点击返回键时,当前的activity会慢慢的消失直到销毁,所以它会走onPause()→ onStop(),再到onDestroy()完全销毁。

这就是一个activity从它打开,再到它看不见,最后到销毁的一个完整的流程。

1.2 再说旁边的分支

①当我们的activity去启动一个对话框的时候

在这里插入图片描述

  • 当我们的activiy去启动一个对话框的时候,对话框会使我们的activity部分不可见,这个时候执行onPause()。
  • 当对话框消失后,我们的activity又重新来到前台完全可见,这个时候会执行onResume(), 然后activity又进入到运行的状态。

②当我们的activity去启动另外的一个activity的时候

比如说A activity 去启动 B activity。

在这里插入图片描述

  • 当 B activity 还没有完全盖住 A activity 的时候,我们的A activity执行的是onPause()动作。
  • 当 B activity 完全显示出来的时候,我们的 A activity 就进入onStop() 的状态。
  • 当 B activity 退出,重新回到 A activity 的时候,我们的 A activity 要重新显示出来,它会经历 onRestart(),然后再重新执行 onStart() 和 onResume() ,再走到我们activity的正常运行状态。

附A启动B,又从B返回A的生命周期的打印:

在这里插入图片描述

2.异常情况下

在这里插入图片描述

  • 假如我们开启了新的应用,使得我们当前的app不可见(比如按home键),被挂在后台。
  • 假如被挂在后台的过程中 出现了 内存不足,那我们的app就有可能被我们的系统给kill掉整个进程。

如果我们的app被系统kill之后,我们该如何处理呢?

这个时候我们就可以使用:

  • onSaveInstanceState() 保存数据

  • onRestoreInstanceState()或onCreate()中 恢复数据

积累点滴,做好自己~