今天介绍一下Android中最常用的组件activity的生命周期。当activity处于Android应用中运行时,它的活动状态由Android以Activity栈的形式管理。当前活动的Activity处于栈顶。随着不同应用的运行,每个Activity都有可能从活动状态转入非活动状态,也可能从非活动状态转入活动状态。
归纳起来Activity大致会经过如下四个状态。
活动状态:当前Activity位于栈顶,用户可见,可以获得焦点。
暂停状态:其他Activity处于栈顶,该Activity依然可见,只是不能获得焦点。
停止状态:该Activity不可见,失去焦点。
销毁状态:该Activity结束,或Activity所在的Dalvik进程被结束。
下图显示了Activity生命周期及相关回调方法。
从图中可以看出,在Activity的生命周期中,如下方法会被系统回调。
onCreate:创建Activity时被回调。
onStart:启动Activity时被回调。
onRestart:重新启动Activity时被回调。
onResume:恢复Activity时被回调。
onPause:暂停Activity时被回调。
onStop:停止Activity时被回调。
onDestroy:销毁Activity时被回调。
下面演示一下,演示代码:
public class Lifecycle extends Activity { final String TAG = "--CrazyIt--"; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); //输出日志 Log.d(TAG , "-------onCreate------"); Button bn = (Button)findViewById(R.id.bn); //为bn按钮绑定事件监听器 bn.setOnClickListener(new OnClickListener() { @Override public void onClick(View source) { //结束该Activity Lifecycle.this.finish(); } }); } @Override public void onStart() { super.onStart(); //输出日志 Log.d(TAG , "-------onStart------"); } @Override public void onRestart() { super.onRestart(); //输出日志 Log.d(TAG , "-------onRestart------"); } @Override public void onResume() { super.onResume(); //输出日志 Log.d(TAG , "-------onResume------"); } @Override public void onPause() { super.onPause(); //输出日志 Log.d(TAG , "-------onPause------"); } @Override public void onStop() { super.onStop(); //输出日志 Log.d(TAG , "-------onStop------"); } @Override public void onDestroy() { super.onDestroy(); //输出日志 Log.d(TAG , "-------onDestroy------"); } }
将Activity设置为程序的入口Activity,当程序启动并执行该Activity,在LogCat窗口输出:
当按下主页键,返回到桌面,当前该Activity将失去焦点且不可见,但该Activity并未被销毁,只是进入停止状态。此时的LogCat输入:
再次找到该应用并启动它,将可以看到下面的输出:
如果用户单击返回键,该Activity将会结束自己,LogCat输出:
这就是我对Activity生命周期的一些认识,希望能够帮助到大家。
注:本人参考了疯狂Android讲义。