刚刚在stormzhang的一篇叫 android学到哪种程度可以去找工作中看到张哥提了这么一个观点如果我问你Android中Activity生命周期你还支支吾吾的那我就对你没什么兴趣了。吓得我赶紧在脑海中回顾了下有关activity生命周期的知识,便打算趁热打铁写下自己对activity生命周期的理解。
1.Activity形态
Activity一个最大的特点就是拥有多种形态,它可以在多种形态间进行切换,以此来控制自己的生命周期。
- Active/Running
这时候,Activity处于Activity栈的最顶层,可见,并与用户进行交互。 - Paused
当Activity失去焦点,被一个新的非全屏的Activity或者一个透明的Activity放置在栈顶时,Activity就转化为Paused形态。但它只是失去了与用户交互的能力,所有状态信息,成员变量都还保持着,只有在系统内存极低的情况下,才会被系统回收掉。 - Stopped
如果一个Activity被另一个Activity完全覆盖,那么Activity就会进入Stopped形态。此时,它不再可见,但却依然保持了所有状态信息和成员变量。 - Killed
当Activity被系统回收掉或者Activity从来没有创建过,Activity就处于Killed形态。
由此可见,用户的不同动作,会让activity在这四种形态间切换。而开发者,虽然可以控制Activity如何“生”,却无法控制Activity何时“死”。
2.Activity生命周期
Google给了我们一张图来揭示Activity生命周期,如图。
程序启动运行并结束上述生命周期的方法执行顺序是这样的:
onCreate()–>onStart()–>onResume()–>onPause()–>onStop()–>onDestroy(),这张经典图众所周知,开发者当然不必实现所有的生命周期方法,但知道每一个生命周期状态的含义,可以让我们更好地掌控Activity,让它能更好地完成你所期望的效果。
- onCreate():创建基本的UI元素。
- onPause与onStop:清除Activity的资源,避免浪费。
- onResume():需要重新初始化在onPause()中释放的资源。
- onStart():每当Activity由不可见到可见时,都会调用该方法。
- onRestart():需要初始化在onStop()中释放的资源。
- onDestroy():当活动完成或者被系统销毁的时候会调用该方法。
3.总结
- 在系统调用onCreate()方法之后,就会马上调用onStart()方法,然后继续调用onResume()方法以进入Resumed状态(也就是前面说的Active/Running形态),最后就会停在Resumed状态,完成启动。
- 当栈顶的Activity部分不可见后,就会导致Activity进入Pause形态,此时就会调用onPause()方法,当结束阻塞后,就会调用onResume()方法来恢复到Resume形态。
- 当栈顶的Activity由部分不可见(调用onPause())到完全不可见(调用OnStop())或者从可见(调用onResume())到完全不可见时,也就是停止过程,此时系统会调用onPause()方法和onStop()方法。
另外,由图可知,从可见到不可见中间一定会经过部分不可见也就是一定会调用onPause()方法,而不能直接从可见跳到完全不可见,可见系统在Activity不可见的时候一定会调用onPause()方法;而当Activity由不可见到可见时,系统会通过顺序依次调用onStoped()–>onRestart()–>onStart()。
以上便是我对Android 中Activity生命周期的理解。
2018.3.19更
欢迎加入我的Java交流1群:659957958。
2018.4.21更:如果群1已满或者无法加入,请加Java学习交流2群:305335626 。
4.联系
If you have some questions after you see this article,you can tell your doubts in the comments area or you can find some info by clicking these links.