您的位置:首页 > 移动开发 > Android开发

Android之路—Activity的生命周期

2016-06-16 09:43 316 查看

1、引言:

       做Android开发也有一段时间了,但是感觉进入了瓶颈期,对于Android的很多知识点都好像有点了解,但是又不能道出个所以然。于是下定决心要提升自己,这里选择了《Android开发艺术探索》作为自己的进阶宝典。通过写博客的方式记录自己进阶学习的点滴。

2、Activity正常生命周期:



     如上图所示,Activity的正常生命周期就是这个流程,但只是知道Activity的生命周期方法、以及回调顺序是不够的。主要是得知道Activity的所有生命周期方法的含义:

     1.onCreate() ----- Activity被创建时回调的方法,正常生命周期该方法只会贝调用一次,如果把Activity看成开关,那么onCreate()方法就是代表开关打开。

     2.onStart() ----- Activity已经“可见”,但是还处于后台。这里说的可见并不是肉眼的可见,只是代表着Activity已经完成了基本的初始化工作,为什么处于后台是肉眼无法看见的,是因为Activity还没有处于栈顶,用户能够看见的Activity只能是栈顶Activity。

     3.onResume() ----- Activity已经可见,并且处于前台。此时的Activity是用户能够看见的,这个时候Activity已经被放置在栈顶位置。

     4.onPause() ----- Activity已经不可见,此时Activity被移至后台,也就是说从栈顶的位置移除了,但此时的Activity并没有被干掉。

     5.onStop() ----- 顾名思义此时Activity已经被暂停工作了,但是Activity仍然没有被干掉(这里先不讨论异常生命周期)。

     6.onDestory() ----- Activity被销毁,正如前面说如果Activity是开关,那么这个方法就是开关关闭。

     7.onRestart() ----- Activity再次被移至栈顶,比如Activity A 跳转到Activity B 或者切换到桌面之后再回到Activity A就会回调这个方法。

3、Activity异常生命周期:

     为什么会有异常生命周期呢?这是因为在系统资源配置发生改变、系统内存不足等情况下,优先级低的Activity会直接被系统干掉。因此Activity的数据恢复就显得格外重要!

     其实Activity异常生命周期与正常生命周期差不了多少,只不过由于是出现异常情况致使Activity被杀死,是用户非自愿的,因此必须要进行Activity之前数据的保存还原;于是Android提供了两个保存数据、还原数据的方法:

     1.onSaveInstanceState(Bundle outState) ----- 进行当前Activity实例的数据存储。

     2.onRestoreInstanceState(Bundle inState) ----- 还原当Activity之前所保存的数据。

     3.那么这两个方法是在什么时候被回调的呢?

          假设当前Activity A已经位于前台可见(必定执行了onCreate()、onStart()、onResume()),但此时发生了横屏的切换(横竖屏切换导致系统资源发生了改变),那么Activity A 就会提前被干掉(onPause()、onStop()、onDestory()),但是此时是因为出现了异常情况,因此在onStop()方法回调之前会回调onSaveInstanceState()进行状态数据(如所有子View位置、大小等)的保存,这个方法是在onStop()之前回调,但是不一定在onPause()之后回调,有可能会在onPause之前回调。当横屏过来之后Activity
A 其实已经不存在了,只是这个时候重新创建的Activity A' 会还原Activity A的数据,从而保证还是用户操作的Activity;onRestoreInstanceState()会在onStart()回调之后进行回调。

    4.AndroidMainfest.xml可以来通过android:configChange属性来进行Activity系统配置改变的设置;

下面是Android系统资源配置改变的设置图:



                                                  
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息