四大组件_Activity_生命周期

四大组件_Activity_生命周期_第1张图片

(1)onCreate:表示Activity正在被创建。

(2)onRestart :表示Activity正在重新启动。当前Activity 从不可见重新变为可见状态时该方法会被调用。

(3)onStart :表示 Activity 正在被启动,此时 Activity 已经可见了,但是还未到前台,还无法和用户交互。

(4)onResume :表示 Activity 已经可见了,并且已经在前台,可以与用户交互。

(5)onPause :表示 Activity 正在停止。

(6)onStop:表示 Activity即将停止。

(7)onDestroy :表示 Activity 即将被销毁。

特性:

1> 从 Activity 是否可见来说

onStart() 和 onStop() 是配对的

 onStart() --> Activity 可见(不在前台)

onStop() --> Activity 不可见(不在前台)

2> 从 Activity 是否在前台(与用户可交互)来说

onResume() 和 onPause() 是配对的

onResume() --> Activity 在前台

onPause() --> Activity  不在前台

3> 用户打开了新的 Activity 时,当前 Activity 正常回调为 onPause() --> onStop() , 但是当新打开的 Activity 是透明主题时,当前 Activity 的 onStop() 方法不会被回调。

4> 在 Activity A 中打开新的 Activity B,旧的 A 的 onPause() 方法被调用之后才会走新的 B 的 生命周期, 所以不适合在 onPause() 方法中做耗时操作,以免影响下一个 Activity 的创建与显示。

=====================================

二、异常情况下的生命周期分析

资源配置发生改变(如横竖屏幕切换)、系统内存等资源不足时会导致 Activity 的销毁与重建。

系统提供了 onSaveInstanceState() 和 onRestoreInstanceState() 方法来存储和恢复数据。

1> 关于 onSaveInstanceState() 和 onRestoreInstanceState() 方法

(1)两者不是必然成对出现

onSaveInstanceState() 方法在 Activity 可能会被销毁的情况下就会被调用,如 用户按下 Home 键,用户锁屏,当前 app 进入后台等都可能触发调用 onSaveInstanceState() 方法。正常消耗不会被调用。

onRestoreInstanceState() 方法则只在 Activity 确实销毁重建时才会被调用。

(2)onSaveInstanceState() 保存的数据在 重建的 Activity 中通过 onCreate()  及 onRestoreInstanceState() 中都可以拿到,只是在 onCreate() 获取数据的话需要做非空判断。

2> View 也实现了 onSaveInstanceState() 和 onRestoreInstanceState() 方法。

当 Activity 意外终止并恢复时,系统为我们保存并恢复了当前的视图结构,如用户输入的数据,listview 滚动位置等。这些是依赖 view 自身的onSaveInstanceState() 和 onRestoreInstanceState() 来实现的

关于保存和恢复 View 层级结构,系统工作流程是这样的:首先 Activity 被意外终止时,Activity 会调用onSaveInstanceState()去保存数据,然后Activity会委托Window去保存数据,接着 Window 再委托它上面的顶级容器去保存数据。 顶层容器是一个 ViewGroup,一般来说她很可能是 DecorView。最后顶层容器再去一一通知它的子元素来保存数据。

这是典型的委托思想,上层委托下层,父元素委托子元素去处理一件事情。类似的应用如 View 的绘制过程、事件分发等、

你可能感兴趣的:(四大组件_Activity_生命周期)