Android官方文档里对Activity的生命周期有比较详尽的描述,但因为资源回收机制带来不肯定性,咱们的程序运行结果经常与预期的不符,而调试这类问题又十分消耗时间和精力。解决的根本办法仍是要理解透Activity的生命周期及相关内容,这篇帖子着重介绍Activity生命周期自己,以后会用一两篇帖子来介绍如何处理异常的状态变化。html
下图是官方文档里的Activity生命周期图,其中彩色标出的四个框是Activity的四种状态,当Activity的状态改变时会触发一个或多个onXXX()方法。android
当Acitivity第一次被建立时触发,通常在这里要作的事情包括建立视图(setContentView())、向视图填充必要的数据等等。app
这个我比较少用到,按文档上的介绍,若是Activity以前被stop过,那么下一次onStart()方法以前会先触发这个方法。spa
只要Activity从不可见变成可见,就会触发到这个方法,但被AlertDialog遮挡/显示的状况不算在内。线程
当Activity来到最上层的时候,也就是开始与用户直接交互时,触发这个方法。例如原本Activity被一个AlertDialog遮挡,当这个AlertDialog消失时,onResume()方法就被触发。调试
和onResume()的触发条件恰好相反,若是Activity原本在最上层,当它要让出最上层的位置时会触发这个方法。onPause()和onResume()是被触发最频繁的两个方法,因此在这里不该该执行过于消耗资源的方法。htm
当有其余Activity覆盖了当前Activity时,不论另外一个Activity是新开始的仍是从下层移至最上层的,当前Activity的onStop()方法都会被触发。生命周期
Activity生命周期的终点。有两种状况会致使它被触发:1)执行了Activity#finish()方法;2)Android系统因为资源不足等缘由决定杀掉Activity所在进程。经过isFinishing()方法能够判断出是哪一种状况。在这个方法里,咱们通常要作的事情是释放Activity占有的资源,例如后台正在进行的下载线程等等。进程
最后,举个实际例子来讲明,假设你有一个“首页Activity”和一个“编辑页Activity”。ci
当用户点击首页里的“开始编辑”按钮时,首页的onPause()->onStart()onStop()依次触发,编辑页的onCreate()->onStart()->onResume()依次触发;(感谢James.H.Fu指出的错误)
当用户在编辑页按下“返回”按钮时,编辑页的onPause()->onStop()依次触发,以后首页的onStart() -> onResume()依次触发;
这时用户在首页按下“返回”按钮,首页的onPause()->onStop()->onDestroy()依次触发。
参考资料:
Activity Lifecycle
Simplest Android Activity Lifecycle
Activity lifecycle explained in details