从零开始学习Android 开发笔记-Activity生命周期

时间:2021-12-26 23:41:21


Activity生命周期

在Android中有四种组件:Activity、Service、Broadcast、Contentprovider。其中Activity是状态最多、最复杂的组件,也是最应该了解清楚的组件。

Activity的生命周期如图: 

从零开始学习Android 开发笔记-Activity生命周期

图1

从零开始学习Android 开发笔记-Activity生命周期

图2


 

图可以看出Activity的状态包括:Create、Start、Resume、Pause、Stop、Destroy状态。图2可能更能理解一个Activity从启动到消亡的整个过程,基本上是从创建(onCreate)->开始(onStart)->展示(onResume)->暂停(onPause)->停止(onStop)->销毁(onDestroy)的过程。

如何正确理解各自状态的变化,我们可以采用不同分类进行理解(微信号:react-javascript)。

1.可见与不可见

a.可见:Started、Resumed、Paused状态

Started:执行onCreate后,组件该处于Started状态,执行onStart事件,组件第一次呈现在用户面前,其各类页面信息均已经设置完成。但是与Resumed不同的是,此时用户无法与Activity进行交互。

Resumed:执行完onStart后,进入Resumed状态,此时组件处于可交互状态,用户可以进行输入和读取。

Paused:组件失去焦点,用户点击返回键或者组件被覆盖了。组件处于半可见状态,但是此时页面UI还是可以更新的。

b.不可见:Created、Stopped、Destroyed

Created:执行onCreate事件,设置页面元素与布局,绑定各类 数据,建立与页面布局文件关联setContentView。

Stopped:页面不可见,一般在新的组件创建并进入新组件时,原组件将不可见,进入Stopped状态。

Destroyed:组件被销毁。

2.三个环路

a.Resumed->Paused->Resumed:轻量级环路,一般处于页面频繁操作,无需重新设置初始数据。类似于行驶汽车的刹车,需要随时停止,但并不关闭发动机。

b.Started->Resumed->Paused->Stopped:一个可以称之为半重启的环路,仅仅只是不需要执行onCreate,不需要设置页面布局。执行onStop事件后,组件称为后台应用。

c.Created->Started->Resumed->Paused->Stopped->Created:此环路并没有在图形中划出来,仅仅在内存不够,别的应用需要内存的情况下执行,相应的组件进程会被killed,但用户执行back,系统将重现创建组件。

3.可执行次数

a.只有一次:onCreate、onDestroy.

b.其它可以多次。

除了Activity正常创建运行外,其它操作也会引起Activity的状态变化。

  • 屏幕旋转:Activity将销毁后,重新创建,因为已经使得页面布局变化,将从onCreate开始执行。
  • Back键:原Activity将依次调用onRestart、onStart、onResume。

从状态变换可以看出,在屏幕旋转时状态变化类似于重新创建,然而在现实应用中我们常常有这样的需求。在Android中采用的是onSaveInstanceState和onRestoreInstanceState进行保存数据和恢复数据。

  • onSaveInstanceState中保存数据,onSaveInstanceState在onPause之后,onStop之前执行。
  • onRestoreInstanceState中读取数据,在onStart之后,onResume之前执行。

Activity是Android系统中最重要的组件,各个状态转换也存在一些模糊的界限,哪个操作具体放在哪个事件中需要根据Acitvity的状态特点和业务需要来定,并非只能放着一个地方,仁者见仁、智者见智了。