`
LoveZhou
  • 浏览: 270180 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Activity的生命周期

阅读更多
Activity有三种状态:
活动或者称作运行状态:当Activity获得焦点时,Activity处于运行状态,负责与用户交互,此时的Activity处于Activity栈的最顶端;

暂停状态:Activity失去焦点但仍然可见的状态;比如被一个透明的Activity覆盖,或者被非全屏的Activity覆盖,暂停的Activity 没有被系统杀死,系统保存了它的状态,可以恢复到暂停以前的状态,但是当系统内存不足的情况下,会回收暂停的Activity。

停止状态:Activity被另一个Activity完全覆盖,系统可以回收它,通过通知它调用finish方法,或者直接杀掉它的进程,当它恢复显示的时候,它必须重新开始,重新恢复之前的状态。

Activity从一个状态运行到另一个状态,状态改变时会执行相应的周期方法:

void onCreate(Bundle savedInstanceState)
void onStart()
void onRestart()
void onResume()
void onPause()
void onStop()
void onDestroy()

一个七个周期方法,你可以重写这些方法,当状态改变时来完成你的工作,所有的Activity必须重写
onCreate方法,Activity第一次运行的时候会执行此方法,你可以在此方法中完成一些初始化操作。

在七个周期方法中,包含着三个嵌套的周期:
完整的生命周期:
     onCreate()到onDestroy()方法,onCreate()方法中经常做一些全局的初始化操作,onDestroy()中释放或者保存资源.

可见生命周期:
     onStart()到onStop()方法,在这个周期中,用户可以看见Activity,但不一定能够与之交互,这两个方法可以随着状态的变化被执行多次。

前景生命周期:
     onResume()到onPause()方法,在这个周期中,Activity处在其它Activity之前,即在Activity栈的最顶端,负责与用户进行交互,伴随着状态的变化,这两个方法可以被执行多次。

当Activity的进程被杀掉之前,一定会执行方法,onPause(),可能会执行onStop(),onDestroy(),所以可以在opause()方法中做一些持久化操作。

保存Activity状态:
onSaveInstanceState()方法,在activity被回收之前调用,即在onpause()方法执行前调用,系统提供一个Bundle对象,可以用来存储状态信息,当Activity重新开始后,系统会把Bundle对象传给onCreate方法,onRestoreInstanceState()方法,可以在它们中恢复状态。

用户点击back键时不会触发onSaveInstanceState()方法。

测试中发现,当前Activity上弹出一个对话框后,Activity失去焦点,但仍然可见,此时不会触发onPause()方法,取消对话框后,也不会触发onResume()方法,当前Activity上弹出一个对话框主题的Actiivty后,onPause()方法会被触发,返回时onResume()方法会被触发,即周期方法的触发是Activity级别的.
分享到:
评论
1 楼 夜色蓝 2011-12-13  
讲得还不错哦。

相关推荐

Global site tag (gtag.js) - Google Analytics