深入理解Activity生命周期(一)

来源:互联网 发布:linux rm 删除文件 编辑:程序博客网 时间:2024/05/17 22:06

        对于每一个Android开发者而言,Activity是再熟悉不过的四大组件,深入理解Activity是非常有必要的事情。

        首先我们讲讲典型情况下Activity的生命周期。

        Android是使用任务来管理Activity的,一个任务就是一组存放在栈里的Activity的集合,这个栈也被成为返回栈。栈是一种后进先出的数据结构,在默认情况下,每当我们启动一个活动,它就会在返回栈中入栈,并处于栈顶的位置。而每当我们按下Back键或者调用Finish()方法去销毁一个活动时,处于栈顶的活动会出栈,这时前一个入栈的活动就会处于栈顶的位置。系统就是会显示处于栈顶的活动给用户。

        在正常情况下,Activity会经历如下生命周期。

(1)onCreate():表示Activity正在被创建,是活动第一次被创建的时候调用,可以做一些初始化工作,比如加载布局,绑定事件等。

(2)onStart():表示Activity正在被启动,在Activity又不可见变为可见时被调用,这时Activity已经可见了,但是还没有出现在前台,还无法与用户交互。可以理解为Activity已经显示出来了,但是我们还看不到。

(3)onResume():表示Activity已经可见了,并且出现在前台并开始活动。注意这个方法和onStart()的区别,onStart()和onResume()都表示Activity已经可见,但是onStart的时候Activity还在后台,onResume的时候Activity才显示到前台。

(4)onPause():表示Activity正在停止,在系统准备去启动或者恢复另一个活动的时候去调用,对应于onResume()。通常会在这个方法中将一些消耗CPU的资源释放掉,以及保存一些关键数据,但是注意不能太耗时,因为这会影响到新Activity的显示。onPause必须先执行完,新Activity的onResume才会执行。

(5)onStop():表示Activity即将停止,在Activity由可见变为不可见的时候调用,对应于onStart()。可以做一些稍微重量级的回收工作,同样不能太耗时。它和onPause()的主要区别在于,如果启动的新活动是一个对话框式的活动,那么onPause()方法会得到执行,而onStop()方法并不会执行。

(6)onDestroy():表示Activity即将被销毁,对应于onCreate(),可以做一些回收工作和最终的资源释放。

(7)onRestart():表示Activity正在重新启动。一般情况下,当当前Activity从不可见重新变为可见状态时,onRestart就会被调用。

针对上图,在具体说明,分一下几种情况:

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

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

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

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

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

(6)从整个生命周期来讲,处了onRestart,其余两两配对。


0 0