Android 系统用栈的形式管理 Activity , 当新的 Activity 被创建是, 会被放置到栈顶, 这个 Activity 会进入到运行状态, 而前一个 Activity 则会被压入栈, 直到新的 Activity 退出, 否则不会出现在前台。
根据 Android 文档, 每一个 Activity 都有四个状态, 它们分别是:
下图表示 Activity 在这四种状态之间切换的生命周期, 以及状态切换时调用的对应的方法:
Activity 生命周期中的各个方法描述如下:
多个 Activity 之间采用的是栈道管理方式, 当用户启动新的 Activity 时, 新启动的 Activity 位于栈顶,当用户按后退按钮时, 栈顶的 Activity 被推出栈道并销毁, 如下图所示:
我们在上次创建的程序中添加 Activity 的生命周期代码, 并加入一些输出, 以便清晰的理解:
[Activity(Label = "MyFirstApp", MainLauncher = true)]
public class MainActivity : Activity {
public const string ExtraMessage = "Cn.Beginor.MyFirstApp.MainActivity.ExtraMessage";
protected override void OnCreate(Bundle bundle) {
base.OnCreate(bundle);
/** 其它代码省略 **/
Android.Util.Log.Debug("Debug", this.GetType().Name + "." + MethodBase.GetCurrentMethod().Name);
}
protected override void OnStart() {
base.OnStart();
Android.Util.Log.Debug("Debug", this.GetType().Name + "." + MethodBase.GetCurrentMethod().Name);
}
protected override void OnResume() {
base.OnResume();
Android.Util.Log.Debug("Debug", this.GetType().Name + "." + MethodBase.GetCurrentMethod().Name);
}
protected override void OnPause() {
base.OnPause();
Android.Util.Log.Debug("Debug", this.GetType().Name + "." + MethodBase.GetCurrentMethod().Name);
}
protected override void OnStop() {
base.OnStop();
Android.Util.Log.Debug("Debug", this.GetType().Name + "." + MethodBase.GetCurrentMethod().Name);
}
protected override void OnRestart() {
base.OnRestart();
Android.Util.Log.Debug("Debug", this.GetType().Name + "." + MethodBase.GetCurrentMethod().Name);
}
protected override void OnDestroy() {
base.OnDestroy();
Android.Util.Log.Debug("Debug", this.GetType().Name + "." + MethodBase.GetCurrentMethod().Name);
Android.Util.Log.Debug("Debug", this.GetType().Name + "." + this.IsFinishing);
}
}
以上是 MainActivity 添加的生命周期代码, 由于代码完全一直, 就不在贴出来了。 接下来开始调试, 首先会启动 MainActivity , 从输出窗口能看到下面的提示:
MainActivity.OnCreate
MainActivity.OnStart
MainActivity.OnResume
点击“发送”按钮,启动 SecondActivity ,看到下面的提示:
MainActivity.OnPause
SecondActivity.OnCreate
SecondActivity.OnStart
SecondActivity.OnResume
MainActivity.OnStop
点击返回按钮, 返回 MainActivity , 得到的提示如下:
SecondActivity.OnPause
MainActivity.OnRestart
MainActivity.OnStart
MainActivity.OnResume
SecondActivity.OnStop
SecondActivity.OnDestroy
SecondActivity.IsFinishing = True
再次点击“发送”按钮,启动 SecondActivity ,看到下面的提示(与第一次是一致的):
MainActivity.OnPause
SecondActivity.OnCreate
SecondActivity.OnStart
SecondActivity.OnResume
MainActivity.OnStop
这时, 如果点击 Home 按钮, 会得到下面的提示:
SecondActivity.OnPause
SecondActivity.OnStop
点击“最近程序”按钮, 打开 MyFirstApp , 会看到下面的提示:
SecondActivity.OnRestart
SecondActivity.OnStart
SecondActivity.OnResume
如果在 MainActivity 点击“返回”按钮, 应用将会退出, 可以看到下面的提示:
MainActivity.OnPause
MainActivity.OnStop
MainActivity.OnDestroy
MainActivity.IsFinishing = True
至此, 整个生命周期测试完成, 有了上面的测试, 应该可以对 Android 的 Activity 生命周期有一个比较清楚的认识。