精通android之Activity

引言:Activity作为android的三大组件之一,可见其的重要性。下面就从它的生命周期深入的了解其特性。

活动的生命周期(Activity lifecycle)

Activity基本上有三种状态:

  •  当它在屏幕前端时(处于当前task的activity栈的顶端)状态为激活(active)或正在运行(running)。该activity是用户动作的焦点。
  •      如果它失去用户焦点,但是仍然对用户可见,它的状态为暂停(paused)。也就是说,另一个activity在其上方,并且那个activity是透明的或者未覆盖整个屏幕,因此这个暂停的activity仍然有一部分显示出来。一个暂停的activity依然是活动的(它保存了所有的状态和成员信息并且和窗口管理器连接),但是可以在内存不足时被系统关闭。
  •  当它被另一个activity完全掩盖时状态为停止(stopped)。这时它仍然保存了所有的状态和成员信息。然而,它对用户来说不再可见,它的窗口被隐藏,并且在其他地方需要内存的时候常常会被系统kill。

          如果一个activity处于暂停或停止状态,系统可以通过调用finsish()方法或者简单地直接kill进程来将其从内存中清理掉。当它再次显示给用户时,就必须完全重启并恢复到原来的状态。当一个activity转换状态时,系统会通过调用下面受保护(protected)的方法对其进行通知。

void onCreate(Bundle savedInstanceState) 
void onStart() 
void onRestart() 
void onResume() 
void onPause() 
void onStop() 
void onDestroy()


所有这些方法都是可以被重载来做状态改变时做适当工作的钩子(hooks)。在对象第一次被实例化的时候,所有的activity必须执行onCreate()方法来做初始化工作。许多activity也实现onPause()来确认数据改变并准备好停止和用户交互。

加在一起,这七个方法定义了一个activity的完整的生命周期。这儿有三个内嵌循环,你可以通过实现它们来进行监听:

  • activity的 完整生命周期起始于onCreate()的初次调用,结束于单一的onDestroy()调用。activity通过onCreate()
    进行它"global"状态的初步建立,通过onDestroy()释放所有剩余资源。例如,如果它有一个从网络下载数据的线程运行在后台,它可以通过onCreate()生成那个线程以及通过onDestroy()停止该线程。

 

  • activity的 可视生命周期从一个onStart()调用开始,直到一个相对的onStop()调用。在此期间,用户可以在屏幕上看到该activity,尽管它可能不在前台并与用户交互。在这两个方法之间,你可以维护需要向用户显示该activity的所需资源。例如,你可以使用onStart()注册一个BroadcastReceiver来监听对你的UI有影响的变化,以及当用户不再能够看到你所显示的时候通过onStop()取消注册。当activity在用户可视和不可视间交替的时候,onStart()和onStop()方法能够被多次调用。

 

  • activity的 前台生命周期开始于一个onResume()调用,终止于一个相对的onPause()调用。在此期间,该activity位于屏幕上所有其他activity的前面并与用户交互。一个activity可以频繁地在重新恢复和暂停状态之间转换—例如,当该设备变成睡眠状态或当开启一个新的activity时,onPause()被调用,当一个activity返回结果或者收到一个新的intent时,onResume()被调用。因此,这两个方法里的代码应该相当轻量。

调用超类(Calling into the superclass)
实现activity的任何生命周期方法的时候都必须首先调用父类的方法,例如:
protected void onPause() {
        super.onPause();
          ......
}


下面的图示说明了这些循环和一个activity在各个状态间转换的步骤。彩色的椭圆是activity所处的主要状态。长方形表示当activity在状态间转换的时候,你可以实现的用来执行操作的回调方法。

精通android之Activity_第1张图片

 

下面的表格描述了这些方法的详情,和在整个活动生命周期中的位置:

精通android之Activity_第2张图片

 

注意上表中的Killable栏。它标明系统是否可以在该方法返回的任何时候杀死该activity所在进程,而无需执行该activity的其他行代码。三个方法(onPause(),onStop()和onDestroy())标记为"Yes"。因为onPause()是三者的第一个,它是唯一一个允许在进程被杀死前调用的方法,onStop()和onDestroy()可能不被调用。因此,你应该使用onPause()将数据(比如用户编辑)进行永久存储。

 

Killable栏被标明"No"的方法在被调用的时候能够保护该activity所处进程不会被杀死。例如,从onPause()返回的时刻到onResume()被调用的时刻,一个activity处于可杀死状态。它将不会处于可被杀死状态直到onPause()再次返回。

你可能感兴趣的:(精通android之Activity)