活动生命周期

活动生命周期要复杂得多。如你所知,Activity 是 Android 应用中的单页,用户可以在其中执行交互。

在下图中,你可以看到 Android Activity 生命周期的样子:

StackOverflow 文档

如你所见,Activity 生命周期有特定的流程。在移动应用程序中,你当然有每个 Activity 类中处理特定生命周期片段的方法:

[Activity(Label = "LifecycleApp", MainLauncher = true, Icon = "@mipmap/icon")]
public class MainActivity : Activity
{
    protected override void OnCreate(Bundle savedInstanceState)
    {
        base.OnCreate(savedInstanceState);
        Log.Debug("OnCreate", "OnCreate called, Activity components are being created");

        // Set our view from the "main" layout resource
        SetContentView(Resource.Layout.MainActivity);
    }

    protected override void OnStart()
    {
        Log.Debug("OnStart", "OnStart called, App is Active");
        base.OnStart();
    }

    protected override void OnResume()
    {
        Log.Debug("OnResume", "OnResume called, app is ready to interact with the user");
        base.OnResume();
    }

    protected override void OnPause()
    {
        Log.Debug("OnPause", "OnPause called, App is moving to background");
        base.OnPause();
    }

    protected override void OnStop()
    {
        Log.Debug("OnStop", "OnStop called, App is in the background");
        base.OnStop();
    }

    protected override void OnDestroy()
    {
        base.OnDestroy();
        Log.Debug("OnDestroy", "OnDestroy called, App is Terminating");
    }
}

官方 Android 文档中有很好的描述:

  • 活动的整个生命周期发生在第一次调用 onCreate(Bundle) 到最后一次调用 onDestroy() 之间。活动将在 onCreate() 中完成所有全局状态设置,并释放 onDestroy() 中的所有剩余资源。例如,如果它有一个在后台运行的线程从网络下载数据,它可以在 onCreate() 中创建该线程,然后在 onDestroy() 中停止该线程。

  • 活动的可见生命周期发生在对 onStart() 的调用之间,直到对 onStop() 的相应调用。在此期间,用户可以在屏幕上看到活动,尽管它可能不在前台并与用户交互。在这两种方法之间,你可以维护向用户显示活动所需的资源。例如,你可以在 onStart() 中注册 BroadcastReceiver 以监视影响 UI 的更改,并在用户不再看到你正在显示的内容时在 onStop() 中取消注册。onStart() 和 onStop()方法可以多次调用,因为活动对用户可见并隐藏。

  • 活动的前景生命周期发生在对 onResume() 的调用之间,直到对 onPause() 的相应调用。在此期间,活动位于所有其他活动之前并与用户交互。活动可以经常在恢复和暂停状态之间进行 - 例如,当设备进入休眠状态,传递活动结果时,何时传递新意图 - 因此这些方法中的代码应该相当轻量级。