Activity生命周期
在Android中有四种组件:Activity、Service、Broadcast、Contentprovider。其中Activity是状态最多、最复杂的组件,也是最应该了解清楚的组件。
Activity的生命周期如图:
图1
图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的状态特点和业务需要来定,并非只能放着一个地方,仁者见仁、智者见智了。