《Android艺术开发探索》--Activity的生命周期

Activity的生命周期全面分析

正常情况下的生命周期

activity生命周期.png

(1)针对一个特定的Activity,第一次启动,回调如下:onCreate->onStart->onResume。

(2)当用户打开新的Activity或者切换到桌面的时候,回调如下:onPause->onStop。这里有一个特殊情况,如果新Activity采用透明主题,那么当前Activity不会回调onStop。

(3)当用户在此回到原Activity时,回调如下:onRestart->onStart->onResume。

(4)当用户按下back键回退时,回调如下:onPause->onStop->onDestory。

(5)当Activity被系统回收后再次打开,生命周期方法回调过程和(1)一样,注意是生命周期方法一样,不代表所有过程都一样。

(6)从整个生命周期来说,onCreate和onDestory是配对的,分别标识着Activity的创建和销毁,并且只可能有一次调用。从Activity是否可见来说,onStart和onStop是配对的,随着用户的操作或者设备屏幕的点亮和熄灭,这两个方法可能被调用多次;从Activity是否在前台来说,onResume和onPause是配对的,随着用户操作或者设备屏幕的点亮和熄灭,这两个方法可能被调用多次。

(7)当前Activity为A,如果这时用户打开一个新的ActivityB,那么回调如下:A-onResume->A-onPause->B-onCreate->B-onStart->B-onResume->A-onStop。

异常情况下生命周期

1)资源相关的系统配置发生改变导致Activity被杀死并重新创建

在默认情况下,如果我们的Activity不做特殊处理,那么当前系统配置发生改变后,Activity就会被销毁并重新创建。其onPause、onStop、onDestory均会被调用,同时由于Activity是在异常情况下终止的,系统会调用onSaveInstanceState来保存当前Activity的状态。这个方法的调用时机是在onStop之前,它和onPause没有既定的时序关系,它既可能在onPause之前也可能在之后。这个方法只会出现在Activity被异常终止的情况下,正常情况下系统不会调用此方法。当Activity被重新创建后,系统会调用onRestoreInstance,并且把Activity销毁时onSaveInstanceState方法所保存的Bundle对象作为参数同时传递给onRestoreInstanceState和onCreate方法。因此我们可以通过onRestoreInstanceState和onCreate方法来判断Activity是否被重建了,如果被重建了,那么我们就可以取出之前保存的数据并恢复从时序上来说,onRestoreInstanceState的调用时机在onStart之后。

(2)资源内存不足导致低优先级的Activity被杀死

a、前台Activity——正在和用户交互的Activity,优先级最高。

b、可见但非前台Activity——比如Activity中弹出一个对话框,导致Activity可见但是位于后台无法和用户直接交互。

c、后台Activity——已经被暂停的Activity,比如执行了onStop,优先级最低。

可以给Activity指定configChanges属性。防止Activity重建

android:configChanges="orientation|keyboardHidden"
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 启动与销毁Activity 不同于使用 main() 方法启动应用的其他编程范例,Android 系统会通过调用对...
    安卓Boy阅读 1,797评论 3 5
  • 启动与销毁Activity 不同于使用 main() 方法启动应用的其他编程范例,Android 系统会通过调用对...
    mouekz阅读 664评论 0 0
  • 您的应用中的Activity应该做到如下需求: 1.用户在使用应用时接听来电或切换到另一个应用,它不会崩溃。 2....
    正阳Android阅读 542评论 1 0
  • Android的开发中我们大部分都是和Activity打交道,而想很好的运用Activity首先必须要清楚Acti...
    云天随笔阅读 1,269评论 0 1
  • 这是我第三遍看《Android开发艺术探索》这本书了,从第一遍看的云里雾里,第二遍略微明白之后,我决定看第三遍,并...
    陈添阅读 876评论 2 8