在家无聊,读《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) |