代码改变世界

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

2010-05-31 14:29  HalZhang  阅读(2975)  评论(2编辑  收藏  举报

接上文:《Android开发——Activity(活动)的生命周期(上)》

四、监听活动状态变化

为了确保对活动状态变化作出正确的响应,Android提供一个系列的事件控制器,监听活动的在整个生命周期的状态变化。活动的生命周期进一步细化,可以分为:全周期(Full Lifetime)>可视期(Visible Lifetime)>激活期(Active Lifetime),如下图所示:

lc图1 活动的生命周期

如上图所示,Activity状态的改变都会触发对应的方法。

Full Lifetime 全周期介于调用 onCreate 与 onDestroy 之间。在一些情况下,终止一个活动并不调用 onDestroy 。Activity通过调用 onCreate 来初始化用户界面,数据,启动服务以及线程。onCreate 方法有个Bundle对象参数,这个参数含有最后一次调用 onSaveIntanceState 保存的UI状态数据。我们可以在 onCreate 中利用这个参数来恢复UI状态数据,或者重写 onRestoreInstanceState 。重写 onDestroy 释放资源,关闭数据库等操作。

为了写出比较高效的代码,有个比较好的建议是避免创建短期对象。快速的创建和销毁对象容易增加碎片回收线程的压力,这样会直接影响用户体验。

Visible Lifetime 可视期介于调用 onStart 与 onStop 之间。此时Activity是可见的,但是不能响应用户事件。一个Activity在其生命周期中是有可能经历多个可视期的。在非常极端的情况下,系统也有可能终止一个处于可视期的活动,这种情况很少见。onStop 方法通常用于暂时或者停止那些用来更新UI的动画,线程,定时器,服务等,所以当活动不可见的时占用的系统资源是很少的。当活动由不可见状态转化为可见状态时,在 onStart 中再启动相关的线程和服务。onStart 和 onStop 同样也用来注册和取消注册(unregister)那些用来更新UI的广播接收者。在活动不可见时我们需要取消注册接受者(Receivers),特别是那些支持目的动作(Intent)以及更新UI的接收者。

Activity Lifetime 当活动的 onResume 被调用,活动进入激活期;当 onPause 被调用时,激活期结束。一个活动被激活,它将处于前景屏幕,同时响应用户的事件。同样在活动的生命周期结束之前,存在多个激活期,一旦有新的活动被激活,当前活动将会失去焦点(暂停甚至停止……)。激活期是活动生命周期比较活跃的部分,会频繁调用 onResume 和 onPause ,所以为了有良好的用户体验,在 onResume 和 onPause 方法中的代码需要有更高的效率。

在调用 onPause 之前,活动会调用 onSaveInstanceState 来保存活动的UI状态到 Bundle ,这个 Bundle 就是 onCreate 和 onRestoreInstanceState 这两个方法的参数了。onSaveInstanceState 保存UI状态(比如多选按钮的状态,界面焦点=),这样当活动被重新激活时,能够正确显示被暂停前的UI。多数的活动都重写 onPause 方法来提交未保存的数据,我们也可以在此选择是否暂停线程,广播接收者,这完全依软件架构本身而定。在 onResume 中一般不执行太多的代码,创建UI一般在 onCreate 或者 onRestoreInstanceState 中实现。

五、Android中的Activity类(1.5版本的sdk)

  • MapActivity Google Map的活动类
  • ListActivity 列表活动类
  • ExpandableListActivity 支持多级列表的活动
  • ActivityGroup 支持在一个屏幕插入多个活动

今天到此,谢谢关注。