Android Activity 组件生命周期

在线参考:http://tool.oschina.net/apidocs/apidoc?api=android/reference

Activity (类关系概览)

类树图

类概述

一个

Activity Lifecycle(生命周期)

在系统中的Activity由Activity的堆进行管理。当一个新的Activity被创建时,它被压入堆的顶部,并成为当前运行的Activity,之前运行的Activity在新创建的Activity下面,并且将再也不会到达前台直到新Activity退出。

Activity主要有四种状态:
  1. 如果一个Activity在前台显示在界面上(即在Activity堆的顶部),那么这个Activity就是出于运行状态,或者说是活动状态。
  2. 如果一个Activity已经失去焦点,但是依然是可见的(就是说一个新的,不是屏幕全尺寸的,透明的Activity出于当前Activity的顶部,并获得了焦点),那么这个Activity就被暂停了(Paused)。一个被暂停的Activity还是有效的,拥有生命的(保存着所有的状态和成员信息,并且还在窗口管理器中被管理),但是当系统处于极端的低内存条件下就可能被杀死。
  3. 当一个Activity完全被先创建的Activity所遮挡,那它就会被停止(Stopped)。这个Activity仍然保存着所有的状态和成员信息。但是,它不再对用户可见的所以它的窗口被隐藏并且在其他程序需要内存时,系统会把它杀死。
  4. 如果一个Activity被暂停或停止,系统可以通过从将它从内存中的取出,要求它结束生命周期,或者干脆杀死它的进程。但当再次显示给用户时,它必须完全重新启动并恢复到被暂停或停止时的状态。

下图显示了一个Activity的重要状态路径(生命周期)。长方形表示当Activity在两个状态之间移动时那些你可以实现用于执行操作的回调方法。彩色的椭圆形是Activity要进入的主要活动状态。
lifecycle
图中三个主要的循环在你使用Activity时可能会感兴趣。
1. Activity的整个生命周期主要发生在第一次调用onCreate(Bundle)到最后调用onDestroy()。Activity将在onCreate()中进行全局状态的设置,并且在onDestroy()中释放掉所持有的所有资源。例如,如果Activity有一个线程在后台通过网络下载数据,Activity可能会在onCreate()创建该线程,然后在onDestroy()中停止线程。
2. Activity的可视生命周期主要发生调用onStart()直到相应调用onStop()内。在这段时间内,用户可以在屏幕界面上看到Activity,可能Activity不在前台显示,或者没有和用户发送交互。在这两个方法之间的生命周期内,开发者可以持有那些需要通过Activity显示给用户的资源。例如,开发者可以在onStart()中注册一个 BroadcastReceiver来控制那些影响UI界面的变化,并且在onStop()中注销当用户不在开发者所展示的界面。当Activity在用户面前可视和隐藏,onStart()和onStop()方法可以被多次调用。
3. Activity的前景生命周期发生在调用onResume()直到调用onPause()这段时间内。在这段时间内,Activity在Activity堆的最顶端,在其他Activity的上层,并且正在与用户进行交互。Activity可以频繁的进入resumed和paused的两个状态中。例如,当设备进入休眠状态,当一个Activity的结果被传递,当一个意图被传送,因此这些方法中的代码必须进行一些轻量的操作。

Activity的整个生命周期由下面的几个Activity所拥有的方法所定义。这些方法都是挂钩,开发者可以进行重写当Activity状态发送变化时做合适的工作。所有的Activity将实现onCreate(Bundle)来进行相应初始化设置,有些也会实现onPause()来提交数据的变化,或者准备停止与用户进行交互,开发者在实现这些方法时应该一直调用父类方法的实现(super())。

public class Activity extends ApplicationContext {
     protected void onCreate(Bundle savedInstanceState);

     protected void onStart();

     protected void onRestart();

     protected void onResume();

     protected void onPause();

     protected void onStop();

     protected void onDestroy();
 }

一般来说,Activity生命周期的动态如下:

MethodDescriptionKillable?Next
onCreate()当Activity第一次被创建时被调用,在这个方法内应该做所有正常的静态化设置:创建View对象,为列表绑定数据,等待。该方法也提供了一个包含Activity先前被冻结的状态信息Bundle对象(如果有的话)
onRestart()当Activity已经被暂停,然后再次启动时调用NoonStart()
onStart()当Activity将被用户可见时调用。之后调用onResume()使Activity处于前景状态,或者调用onStop()使Activity隐藏NoonResume() or onStop()
onResume()当用户开始与用户进行交互时调用,在这个时刻,该Activity位于Activity堆的顶部,用户通过这个状态进行输入。NoonPause()
onPause()当系统将要开始恢复上一个Activity时调用,通常这这个方法中进行提交未保存的变化用于持久化数据,停止动画,和其他会占用CPU资源的操作,等等。这个方法的实现必须非常的快速,因为下一个Activity将无法恢复知道该方法返回。Android 3.0之前onResume() or onStop()
onStop()当Activity不再对用户可见时调用,因为其他Activity意见被恢复,并且即将覆盖当前Activity。这个方法将发生在当新的Activity将开始,或现存的Activity将被带到前台来,或当前的Activity将被销毁YesonRestart() or onDestroy()
onDestroy()最后一个调用方法将在Activity被销毁的时候调用,将在当Activity被结束(调用onFinish()),或系统暂时性的销毁当前Activity的实例来节省空间发生,可以通过调用isFinishing()来判断是哪一种情景调用来这个方法Yes/

注意在上表中的“Killable”列 - 对于那些被标记为killable的方法,在该方法返回之后承载该Activity的进程可在任何时间被系统杀死而不执行任何一条代码。正因为如此,开发者应该使用的onPause()来写任何持久性数据(比如用户编辑)到存储。此外,该方法的onSaveInstanceState(Bundle)在将Activity至于后台状态时被调用,允许开发者避免将那些动态变化的实例状态保存到Activity所给定的Bundle对象中,将在之后onCreate(Bundle)方法中被接收如果Activity需要被创新创建。通过查看进程生命周期部分获取更多关于承载Activity的进程的生命周期和Activity生命周期的联系的信息。注意很重要的一点是在onPause()中保存永久数据而不是在onSaveInstanceState(Bundle)中,因为后者并不是生命周期回调的一部分,所以它并不会在文档中描述在每一种情况下将不会被调用。

请注意,Honeycomb之后的系统版本和与先前的系统版本相比,这些语义将会有些许变化。
从Honeycomb开始,应用程序直到onStop()返回之后,才处于killable状态。这就影响到当 onSaveInstanceState(Bundle)的调用(在onPause()之后,这是安全的调用),也允许应用安全的等待在onStop()进行数据持久化。

那些没有被标记为killable的方法,Activity所在的进程将不能被系统杀死当这些回调方法开始回调至它返回的这段时间内。然而一个Activity在将处于killable状态下,例如,在onPause()之后和onResume之前的这段时间内。

翻译有不足的地方请大家多多指正,谢谢。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值