Activity的状态即状态转换

     理解Activity的生命周期很重要,关于Activity生命周期中的各种方法调用时机,网上资料很多,可以参考博文:基础总结篇之一:Activity生命周期,我也对该博文进行了转载,进行了真机测试,发现有点小差异,有兴趣的可以看一下:Activity生命周期


     下面说一下Activity生命周期中的各种状态,即针对Activity跳转、锁屏、home键等操作对Activity状态转化的影响。

Activity在一个完整的生命周期中会有4中状态(摘自《Android 4 高级编程(第3版)》):

1、活动状态:Activity位于Activity栈的栈顶,它是可见的、具有焦点的前台Activity,这时它可以接受用户输入。
2、暂停(Pause)状态:在某些情况下,Activity是可见的,但是没有获得焦点,此时它就是暂停状态。当一个透明的或者非全屏的Activity位于该Activity之前时,就会达到这种状态,此时该Activity虽然(部分)可见,但没有获得焦点,不能接受用户的输入事件。
3、停止(stop)状态:当一个Activity不可见的时候,它就处于停止状态。
4、非活动状态:当一个Activity被终止之后,在被启动之前它就处于非活动状态,已经被Destroy掉。处于非活动状态的Activity已经从Activity栈中移除了,因此,在它们可以被重新显示和使用之前,需要被重新启动。


以下结果是我在华为P6(Android 4.2.2)真机测试后的总结,测试过程在 http://blog.csdn.net/hanyingjie327/article/details/21242527中有部分描述,针对Activity跳转、锁屏、home键等操作对Activity状态转化的影响:

1、启动Activity,进入活动状态:系统会先调用onCreate()方法,然后调用onStart()方法,最后调用onResume()方法,Activity进入运行状态(活动状态)。


2、当前Activity被其他Activity覆盖其上(但该Activity仍然可见),进入暂停状态:系统会调用onPause()方法,暂停当前Activity的执行,Activity进入暂停状态。


3、当前Activity由暂停状态回到活动状态:系统会调用onResume()方法,Activity恢复到活动状态。

         例如back掉覆盖在当前Activity上面的透明或非全屏的Activity后,当前的Activity会回到活动状态。


4、当前Activity由活动状态进入停止状态:

(1)、当前Activity跳转到新的Activity界面;

(2)、按Home键回到主屏;

(3)、按锁屏键。

(4)、设备休眠。

这4中情况中,当前Activity退居后台,而且均不可见,该状态转化过程中,系统会先调用onPause()方法,然后调用onStop()方法,当前Activity进入停止状态。


5、Activity从停止状态恢复到运行状态:系统会先调用onRestart()方法,然后调用onStart()方法,最后调用onResume()方法,再次进入运行状态。
该条分别针对第4条的4种情况:
(1)、其他的Activity回退到该Activity;
(2)、按完Home键后又从主屏点击应用返回Activity;

(3)、锁屏以后,又通过解锁返回Activity;

(4)、设备休眠后,解锁返回Activity。

这3中情况中Activity状态转化一样,都是从停止状态恢复到运行状态,Activity先调用onRestart()方法,然后调用onStart()方法,最后调用onResume()方法。


6、Activity进入非活动状态,系统先调用onPause()方法,然后调用onStop()方法,最后调用onDestory()方法,结束当前Activity。此时的Activity已经从Activity栈中移除了,因此,在它们可以被重新显示和使用之前,需要被重新启动。有三种情况会使Activity进入非活动状态:

(1)、用户主动退出当前Activity:例如按Back键,或者清除内存进程(有时onDestrory()方法不一定会执行)。

(2)、当前Activity处于暂停(被覆盖)状态或者停止状态(不可见),即第2步和第4步,系统内存不足kill掉了当前的Activity。该情况是我们不可控的,处于暂停状态的Activity只有在极端情况下才会被系统主动终止。

(3)、主动调用Activity的finish()方法。


7、Activity进由非活动状态进入活动状态:

     当前Activity处于非活动状态,而后用户退回、或者主屏点击图标返回、或者解锁屏返回到当前Activity:需要重新开始生命周期,再次调用onCreate()方法、onStart()方法、onResume()方法,进入运行状态。



注意:以上是华为P6(Android 4.2.2)真机测试后的总结,模拟器或者其他Android版本中,Activity跳转、锁屏、home键等操作对Activity状态转化的影响没有经过测试,不知是否会有所差异,有兴趣的可以找个低版本的测试一下。


参考:http://blog.csdn.net/liuhe688/article/details/6733407

已标记关键词 清除标记
©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页