代码改变世界

Android开发——Activity(活动)的生命周期(上)

2010-05-30 08:44  HalZhang  阅读(1667)  评论(2编辑  收藏  举报

一、前言

正确理解Activity的生命周期是非常重要的,只有正确理解Activity的生命周期,才能确保应用程序提供一个符合逻辑的的用户体验以及正确管理应用程序本身的资源。Android中的应用程序并不能管理自身的生命周期,而是由系统统一管理的,当然Activity也是这样子的。在运行时管理以及是否结束Activity进程,Activity的状态决定了应用程序的优先级。反过来,程序的优先级也影响着在运行时是否会终止Activity以及保持Activity持续运行。

二、活动栈

活动在栈中的位置决定了活动状态。当一个新的活动启动时,这个活动就会被当作前景屏幕,并被放到活动栈的栈顶。当用户触发“返回”事件或者前景活动关闭时,下一个活动就会移到栈顶并激活。如下图所示:

栈结构图                                                       图1 Android的Activity栈结构图

之前说过,Android中应用程序的优先级是由其最高优先级的组件(一般就是Activity)决定的。因此当Android需要终止某些应用程序释放系统资源时,就依据活动栈来决定应用程序优先级的高低,从而终止那些低优先级的应用程序。

三、活动状态

  • 激活 当一个活动处于活动栈栈顶,它是可见的,可聚焦的,可接受用户的输入。Android会试图不惜一切代价,甚至是终止处于栈底的活动来回收资源,以保证栈顶活动对资源的需求。当有新的活动被激活,这个活动就会被暂停或者停止。
  • 暂停  活动可见,但是不能聚焦,此时活动就处于暂停状态。当活动暂停时无法接受用户事件。在极端的情况下,Android会终止一个处于暂停状态的活动,来回收系统资源。当一个活动被完全覆盖,它就处于停止状态。
  • 停止  当一个活动不可见,它就处于停止状态。活动会将状态和组件信息保留在内存中。当一个活动转入停止状态,我们需要保存数据和UI状态。一个活动关闭或者退出,就进入不活动状态。
  • 不活动(睡眠)  活动被关闭后,在重新启动之前就处于不活动状态。此状态的Activity并不会存在活动栈中,在显示和使用之前需要重新启动。

Activity状态的改变是不确定的,这是完全由Android的内存管理器控制的。Android会事先关闭那些含有处于睡眠状态,停止状态甚至是暂停状态活动的应用程序。为了提供一个良好的用户体验,Activity状态的改变对用户来说应该是透明的,所以当Activity进入暂停和停止状态,保存UI状态和持久化数据是很重要的。一旦活动重新激活,则恢复相关数据。

由于篇幅较大,接下篇:《Android开发——Activity的生命周期(下)》