Android开发艺术探索学习-老生常谈Activity生命周期

前言:最近看到一本比较适合本身的好书叫《Android开发艺术探索》,发现该书对本身提高技术很是有好处,而后就想着用该书结合android官方开发文档从头开始细细品味一下,深刻理解知识点(由于目前项目不是很忙,因此学习的时间比较多)。固然我给本身的学习规划仍是从Activity开始,按照该书的目录一路看书去,但愿本身看完这本书后技术能力能有一个很大的提高。下面都是本身记录在印象笔记中的笔记,感受用这种笔记习惯去学习真是极好了!!android

1.1 关于Activity的生命周期。
onCreate:生命周期的第一个方法,该方法里面,咱们会作一些初始化工做,好比用setContentView加载布局,恢复bundle数据,初始化控件和数据等等。
onRestart:该方法必须在 执行到onStop方法后调用,常见情形就是用户按下home键后再次返回到该Activity。
onStart:该方法表示Activity已经可见,但尚未出现到前台,还不能与用户交互。
onResume:该方法表示Activity已经可见并能够与用户交互了。可是这里要注意和onStart的区别,onStart的时候Activity还在后台,onResume的时候Activity才显示到前台。
onPause:Activity失去焦点,该方法能够作数据存储、中止动画和其余消耗CPU的操做,可是该方法不能作耗时的操做,否则会影响新Activity的显示。
onStop: Activity变为不可见,一样也不能作一些耗时的回收操做;
onDestory:该方法是Activity生命周期中的最后一个回调,这里能够作资源释放和回收的工做;

1.2 一个Activity总共有四种状态:
1.若是一个Activity运行在前台(在栈顶),那么它是激活态或运行态。
2.若是一个Activity失去了焦点可是仍然可见(就是说有个非全屏或者透明的Activity在该Activity之上),那么它是暂停态。一个暂停态的Activity是彻底存活的状态(它持有全部的状态和成员信息,而且与window manger保持联系)。可是在极其低的内存条件下仍是可能会系统回收掉。
3.若是一个Activity被其余的Activity彻底覆盖,那么它是中止态。它仍持有全部的状态和成员信息,可是对用户来讲它再也不可见,所以它的window被隐藏了,而且当系统须要内存的时候,那么它首当其冲被回收!
4.若是一个Activity是暂停态或者中止态,那么系统会从内存中回收它,或者简单粗暴地直接杀掉它所在的进程。不过当该Activity从新展现给用户的时候,它必须完彻底全地被恢复到先前的状态。

Note:这里有须要注意下在Activity生命周期中,在onCreate、onStart、onResume过程当中的Activity是不能被“Kill”的,可是在onPause(HoneyComb版本以前)、onStop、onDestory过程当中的Activity都有可能被系统“Kill”,所以咱们应该在onPause中将数据保存到存储介质上。此外onSaveInstanceState也能够进行数据保存,可是这须要Activity从新Create才能进行还原数据。因此用onSaveInstanceState保存数据不是很安全,毕竟onSaveInstanceState不是Activity的生命周期。因此google建议咱们在onPause中保存重要数据。

1.3 Activity的生命周期图以下:



1.4 谷歌官方对于生命周期中几个关键循环的地方给了一些建议:
1.(entire lifetime)Activity生命周期的整个过程是从第一个方法 onCreate开始到最后一个方法onDestory结束。一个Activity会在onCreate中作全部的初始化工做,接着会在 onDestory 中释放掉全部持有的资源。
2.(visible lifetime)指Activity处于onStart和与之相对应的onStop方法之中的过程。在此期间用户能够从屏幕上看到它,虽然它有可能在前台且不能与用户交互。
3.(foreground lifetime)指Activity处于onResume和与之相对应的onPause方法之中的过程。在此期间Activity在全部其余Activity之上并且能与用户交互。一个Activity可以很流畅的在onResume和onPause之间切换,因此在这两个方法中尽可能只作一些轻量级的工做。