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

一张图看明白 Android Activity 生命周期

2017-04-06 10:40 309 查看

Android-Activity生命周期

原文链接:

https://github.com/jeanboydev/Android-ReadTheFuckingSourceCode/blob/master/android/Android-Activity%E7%94%9F%E5%91%BD%E5%91%A8%E6%9C%9F.md

概述

作为四大组件中我们使用最频繁的 Activity,它的生命周期大家都了解。 然而面试中经常问到可见它的重要性。下面从两个方面来分析一下 Activity 的生命周期和一些需要注意的细节。

Activity 生命周期图



典型情况下生命周期分析

一般情况下,当当前 Activity 从不可见重新变为可见状态时,onRestart 方法就会被调用。

当用户打开新的 Activity 或者切换到桌面的时候,回调如下:onPause -> onStop,但是如果新Activity采用了透明主题,那么 onStop 方法不会被回调。

当用户再次回到原来的 Activity 时,回调如下:onRestart -> onStart -> onResume

onStartonStop 对应,它们是从 Activity 是否可见这个角度来回调的;
onPauseonResume 方法对应,它们是从 Activity 是否位于前台这个角度来回调的。

从 Activity A 进入到 Activity B ,回调顺序是 onPause(A) -> onCreate(B) -> onStart(B) -> onResume(B) -> onStop(A),所以不能在 onPause 方法中做重量级的操作。

异常情况下生命周期分析

onSaveInstanceState 方法只会出现在 Activity 被异常终止的情况下,它的调用时机是在 onStop 之前,它和 onPause 方法没有既定的时序关系,可能在它之前,也可能在它之后。 当 Activity 被重新创建的时候,onRestoreInstanceState 会被回调,它的调用时机是 onStart 之后。

系统只会在 Activity 即将被销毁并且有机会重新显示的情况下才会去调用 onSaveInstanceState 方法。
当 Activity 在异常情况下需要重新创建时,系统会默认为我们保存当前 Activity 的视图结构,并且在 Activity 重启后为我们恢复这些数据。

比如:文本框中用户输入的数据、 listview 滚动的位置等,这些 view 相关的状态系统都会默认为我们恢复。

具体针对某一个 view 系统能为我们恢复哪些数据可以查看 view 的源码中的 onSaveInstanceState 和 onRestoreInstanceState 方法。

Activity按优先级的分类

前台 Activity > 可见但非前台 Activity > 后台 Activity

android:configChanges=”xxx” 属性,常用的主要有下面三个选项:

local:设备的本地位置发生了变化,一般指切换了系统语言;

keyboardHidden:键盘的可访问性发生了变化,比如用户调出了键盘;

orientation:屏幕方向发生了变化,比如旋转了手机屏幕。

配置了 android:configChanges=”xxx” 属性之后,Activity就不会在对应变化发生时重新创建,而是调用 Activity 的 onConfigurationChanged 方法。

参考资料

Google官方开发文档-Activity

《Android 开发艺术探索》

更多文章

https://github.com/jeanboydev/Android-ReadTheFuckingSourceCode
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  android 生命周期