一、Activity状态
要探索Activity的生命周期,首先要知道Activity有几种状态。
1.运行状态
当Activity处于最顶端,也就是Activity正在运行的时候,便是处于运行状态。系统最不愿意回收的就是这种状态的Activity,因为会带来极差的用户体验感。
2.暂停状态
当一个Activity不在处于最顶端,但是依然可见时,这便是暂停状态。为什么Activity不在最顶端,还会可见呢?因为不是所有的Activity都是占满屏幕的,比如对话框只是占用屏幕中间的部分区域,所以在后面还是可以看到这个Activity的。处于暂停状态的Activity依旧是存活的,并且系统同样不愿意回收这个状态的Activity(因为它是可见的,回收可见的Activity会在用户体验方面造成不良的影响)。只有在内存极低的情况下,系统才会考虑回收这种Activity。
3.停止状态
当一个Activity不在处于最顶端,并且完全不可见的情况,就是停止状态。系统依旧会为这种Activity保存相应的状态和成员变量,但是并不可靠,当其他地方需要内存时,处于停止状态的Activity,就有可能会被回收。
4.销毁状态
当Activity被移除后就是销毁状态,系统最倾向于回收这种状态的Activity,从而保证手机的内存充足。
二、Activity的生存期
二话不说,先上图
如图中所示,Activity从开始到结束一共经历了7个函数。下面一一介绍这个7个函数。
- onCreate():这个函数在每个Activity总都会重写这个方法。它在Activity第一次被创建时调用。你应该在这个方法中完成Activity的初始化操作。比如加载布局,绑定事件等。
- onStart():这个函数在Activity由不可见变成可见时调用。
- onResume():这个函数在Activity准备好和用户进行交互的时候调用,此时Activity一定位于返回栈的栈顶,并且处于运行状态。
- onPause():这个函数在系统准备去启动或恢复另一个Activity时调用。我们通常在这个函数中将一些消耗CPU的资源释放掉,以及保存一些重要数据。但这个函数的执行速度一定要快,不然会影响新的栈顶Activity的使用。
- onStop():这个函数在Activity完全不可见时调用。它与onPause()函数的主要区别在于,如果启动的新Activity是一个对话框式的活动,那么onpause()会执行,而onStop()不会执行。
- onDestroy():这个函数在Activity被销毁之前调用,之后Activity的状态将变为销毁状态,通常在这个函数中释放资源。
- onRestart():这个函数在Activity由停止状态变为运行状态之前调用,也就是Activity被重新启动了。
以上7个函数中除了onRestart()函数,其他都是两两相对的,从而又可以将活动分为3个生存期。
- 完整生存期:Activity在onCreate()函数和onDestory()函数之间所经历的,就是完整生存期。一般情况下,我们会在onCreate()函数中进行初始化操作,而在onDestory()函数中释放内存。
- 可见生存期:Activity在onStart()函数和onStop()函数之间所经历的,就是可见生存期。在可见生存期内,Activity对用户总是可见的,即使可能无法与用户交互。我们可以通过这两个函数。合理的管理对用户可见的资源。
- 前台生存期:Activity在 onResume()函数和 onPause()函数之间所经历的,就是前台生存期。在前台生存期中Activity处于运行状态,此时Activity是可以和用户进行交互的。
Android的生命周期大体就是这些了。