Android Activity生命周期简介

转自:http://blog.sina.com.cn/s/blog_63c87a220100hfub.html

一个Activity有三种状态:

  • 激活或者运行状态,运行在前台(在当前Activity栈的栈顶)。
  • 暂停状态,失去了焦点但是仍然对用户可见,比如有其他的Activity在它之上,或者透明或者没有遮住整个屏幕。
  • 停止状态,被其他Activity覆盖,需要注意的是包括暂停状态在内,这两种状态都仍然保存了所有状态信息,直到被系统终止。

Activity状态间的转换,都会被以下Protected方法监听到:

1
2
3
4
5
6
7
void onCreate(Bundle savedInstanceState)
void onStart()
void onRestart()
void onResume()
void onPause()
void onStop()
void onDestroy()

以上的方法都是钩子,可以通过复写他们来做适当的工作。onCreate()是必须被实现的,来初始化Activity的状态。一般都会在onPause()里来提交数据的改变以准备中止和用户的交互。
注意:所有这些Activity的生命周期方法的实现都应该先调用其父类的方法。比如:

1
2
3
4
protected void onPause() {
    super.onPause();
    . . .
}

这7个方法描述了Activity的整个生命周期,其中包含了三个部分:

  • 整个周期 从onCreate()开始直到onDestroy()结束。在onCreate()里初始化Activity的状态,在onDestroy()里释放所有资源。
  • 可见周期 从onStart()开始到onStop()结束。在这段时间里,用户可以在屏幕上看见Activity,但并不一定在前台和用户进行交互。可以通过反复调用这两个方法来实现界面的显示和隐藏,也就是说可以在onStart()里注册一些BroadcastReceiver来监听用户的操作,在onStop()里注销这些监听事件,因为用户已经无法看见操作界面。
  • 前台周期 从onResume()开始到onPause()结束。这段时间,Activity处在最前端和用户进行交互。在这两个方法里,处理都应该尽量的轻量级,因为它们可能会被无数次的调用,比如手机进入睡眠模式就会触发onPause()。
方法 描述 是否可被杀死 下一个操作
onCreate() 初始化,创建views,绑定list的数据等等 onStart()
onRestart() 在Activity被停止后调用 onStart()
onStart() 在Activity被用户可见之前调用 onResume() 或者 onStop()
onResume() 在Activity和用户交互之前调用(快速,持久化) onPause()
onPause() 在系统要激活另一个Activity时调用(快速) onResume() 或者 onStop()
onStop() 在Activity不再可见时调用 onRestart() 或者 onDestroy()
onDestroy() 在Activity被销毁时调用  

保存Activity状态 想在Activity被中止之前保存状态,必须实现一个方法onSaveInstanceState(),Android会在调用onPause()之前调用它。需要把状态保存在一个键值对对象Bundle中,当Activity再次被激活时,这个对象会被传给onCreate()以及稍后的另一个方法onRestoreInstanceState()以恢复状态。
Note: onSaveInstanceState() 和onRestoreInstanceState()并不是生命周期方法,意味着它们并不一定会被触发。比如当系统销毁一个Activity时,onSaveInstanceState()会被调用,但是当用户去操作销毁一个Activity时(比如用户点击Back),onSaveInstanceState()就不会被调用。在这种场合,用户的行为决定了状态不需要被保存。因为onSaveInstanceState()不会经常被调用,所以只应该用它来保存一些临时的状态,而在onPause()里做数据的持久化操作。

猜你喜欢

转载自cshbbrain.iteye.com/blog/1879607