Chinaunix首页 | 论坛 | 博客
  • 博客访问: 504247
  • 博文数量: 137
  • 博客积分: 3874
  • 博客等级: 中校
  • 技术积分: 1475
  • 用 户 组: 普通用户
  • 注册时间: 2010-07-05 10:50
文章分类

全部博文(137)

文章存档

2011年(37)

2010年(100)

分类: LINUX

2011-02-05 17:27:30

在家无聊,读《pro android》,看到活动生命周期(activity lifecycle)时,发现写的比较乱,图也画错了,原来挺清楚的,结果越看越糊涂,只好去android sdk 文档查看。还是文档写的清楚。于是整理了一下。

活动(activity)在android系统中是被活动栈(activity stack)来管理的。新启动的活动总是放到栈顶。在栈顶的活动就是对用户可见的最新的那个。当栈顶的活动退出,则栈中的下一个活动就运行起来。由于终端中的资源有限,系统会根据用户,系统资源,活动等因素关掉一些活动来释放资源。

一个活动生命周期一般有四个必要的状态:
1.当一个活动处于屏幕最上层(在栈顶),那么这个活动就是运行的(running)或者说是活跃的(active)。
2.当一个活动失去了焦点,但是还能被看到(比如新启动的活动是透明的或者没有把上一个活动完全覆盖),那么他处于暂停的状态(paused)。一个暂停的活动还在运行,但是系统可以根据资源情况把他给杀掉(killed)。
3.当一个活动完全不可见后,就处于停止状态(stopped),他还保存着运行状态和内存信息,但是这种活动一般会被杀掉。
4.当一个暂停或者停止的活动被系统杀掉,当再次恢复时,此活动需要还原成上次被关掉时的状态。

下图是活动生命周期的状态图。图里面的方框是你可以重写的回调函数,这样在状态转移时,你可以进行自定义。图里面的带颜色的椭圆,是活动可能处于的状态。

系统可以根据情况来启动或者停止活动。当一个活动刚刚被启动时,系统会调用onCreate()方法。紧跟onCreate()方法后运行的方法是onStart()方法,但是onStart()方法前的方法不一定是onCreate()方法,也有可能是onRestart()方法。当onStart()方法被调用后,用户还见不到活动,只有onResume()活动调用后,用户才能见到活动,此时活动处于运行状态(running)。处于运行状态的活动在屏幕的最上层,处于活动栈的栈顶,此时用户可以跟活动交互。

当用户打算转移到另一个活动时,当前活动的onPuase()方法就会被调用。onPause()方法调用后,活动还是对用户可见的,但是已经不处于活动栈顶。onPause()后,系统或者调用活动的onStop()方法,这样活动对用户完全不可见,并且一般被系统杀掉,系统或者调用活动的onResume()活动,这样活动又到活动栈顶,对用户可见。当活动onStop()后,被再次调用时,会执行onRestart()方法,来对状态的恢复。然后再次调用onStart()方法,对活动进行初始化。

在整个活动周期中,活动对用户可见的周期是onStart()和onStop()调用之间。
程序在活动栈顶的周期是onResume()和onPause()调用之间。
阅读(1885) | 评论(1) | 转发(0) |
给主人留下些什么吧!~~

ch7398620102011-02-12 14:30:21

新年祝大家新年快乐,看看我的网页吧
        http://rx919.taobao.com