您的位置:华清远见教育科技集团 >> Android资料 >> Activity的生命周期回调方法  
 
Activity的生命周期回调方法
分享到:

Activity的生命周期可分为全生命周期、可视生命周期和活动生命周期,每个生命周期中包含不同的事件回调方法。

1、全生命周期

全生命周期是从Activity建立到销毁的全部过程,始于onCreate(),结束于onDestroy()。

使用者通常在onCreate()中初始化用户界面,分配引用类变量,绑定数据控件,并创建服务和线程等Activity所能使用的全局资源和状态,并在onDestroy()中释放这些资源,并确保所有外部连接被关闭,例如,网络或数据库的联系等;在一些极端的情况下,Android系统会不调用onDestroy()方法,而直接终止进程。

为了避免创造短期对象和增加垃圾收集的时间,以致对用户体验产生直接影响。如果你的Activity需要创建一些对象的话,好在onCreate方法中创建,因为它在一个Actvity的完整生命周期中仅调用一次。

2、可视生命周期

可视生命周期是Activity在界面上从可见到不可见的过程,开始于onStart(),结束于onStop()。
    ·onStart()一般用来初始化或启动与更新界面相关的资源。
    ·onStop()一般用来暂停或停止一切与更新用户界面相关的线程、计时器和服务。
    ·onRestart()方法在onSart()前被调用,用来在Activity从不可见变为可见的过程中,进行一些特定的处理过程。
    ·onStart()和onStop()会被多次调用。
    ·onStart()和onStop()也经常被用来注册和注销BroadcastReceiver或者传感器。

在onStart()和onStop()这两个方法中间,Actvity对用户将会是可见的,尽管它可能部分被遮挡着。在一个Activity完整的生命周期中可能会经过几个Activity可见的生命周期,因为Activity可能会经常在前台和后台之间切换。在极端情况下,系统将销毁掉一个Activity即使它在可见状态并且不调用onStop方法。

3、活动生命周期

活动生命周期是Activity在屏幕的上层,并能够与用户交互的阶段,开始于onResume(),结束于onPause()。在Activity的状态变换过程中onResume()和onPause()经常被调用,因此这两个方法中应使用更为简单、高效的代码。
    ·onPause()是第一个被标识为“可终止”的方法。
    ·在onPause()返回后,onStop()和onDestroy()随时能被Android系统调用。
    ·onPause()常用来保存持久数据,如界面上用户的输入信息等。

当系统而不是用户关闭一个活动来节省内存时,用户可能希望返回到活动且是它之前的状态。为了获得活动被关闭之前的状态,可以执行活动的onSaveInstanceState()方法。Android在活动容易被销毁前调用这个方法,也就是调用onPause()之前。该方法的参数是一个Bundle对象,这个对象可以名值对记录活动的动态状态。当活动再次启动时,Bundle同时被传递到onCreate()和调用onCreate()之后的方法onRestoreInstanceState()。

因为onSaveInstanceState()方法不总被调用,你应该仅使用onSaveInstanceState()来记录活动的临时状态,而不是持久的数据,应该使用onPause()来存储持久数据。

扩展阅读:onPause()和onSaveInstanceState()这两个函数都可以用来保存界面的用户输入数据,它们有什么区别呢?

(1)onPause()一般用于保存持久性数据,并将数据保存在存储设备上的文件系统或数据库系统中的。

(2)onSaveInstanceState()主要用来保存动态的状态信息,信息一般保存在Bundle中。
    ·Bundle是能够保存多种格式数据的对象。
    ·onSaveInstanceState()保存在Bundle中的数据,系统在调用onRestoreInstanceState()和onCreate()时,会同样利用Bundle将数据传递给函数。

当一个活动启动另一个活动时,这两个活动都经历生命周期转换。一个暂停或是停止,然而被启动的活动则启动。有时,这些活动可能需要协调。当这两个活动在同一个进程中,生命周期的回调顺序是明确界定的:调用当前活动的onPause()方法;然后,按序调用启动活动的onCreate()、onStart()、onResume()方法;之后,如果该活动不需再在屏幕上可见,则调用它的onStop()方法。下面我们就来详细学习一下关于Android如何管理多个Activity。

(1)Android用Activity Stack来管理多个Activity,因此,同一时刻只会有顶上的Activity是处于active或者running状态。其他的Activity都被压在下面。

(2)如果非活动的Activity仍是可见的(如果上面压着的是一个非全屏的Activity或透明的Activity),它是处于paused状态的。在系统内存不足的情况下,paused状态的Activity是有可能被系统销毁掉的。

小贴士:因为Android应用程序的生存期并不是由应用本身直接控制的,而是由 Android系统平台进行管理的,所以,对于开发者而言,需要了解不同的组件ActivityService和IntentReceiver的生命,切记:如果组件的选择不当,系统很有可能会关闭一个正在进行重要工作的进程。

 更多相关文章

·图解Android Activity生命周期
·Android应用组件Activity
·Android进程与生命周期
·Android进程的生命周期
·Android常用组件生命周期