用途:在 .NET MAUI 中正确处理应用状态转换,覆盖跨平台 Window 生命周期事件、平台原生映射,以及后台与恢复周期中的状态保存模式。
适用时机:应用进入后台或恢复时保存/还原状态;订阅 Window 生命周期事件;通过 ConfigureLifecycleEvents 挂接平台原生回调;决定初始化、清理或刷新逻辑的位置;理解 Deactivated 与 Stopped 的区别。不适用:页面级导航事件、启动时注册服务、生命周期上下文之外调用平台特定 API。
应用状态:Not Running(进程不存在)、Running(前台接收输入)、Deactivated(可见但失去焦点)、Stopped(完全后台、UI 不可见)。典型流程:Not Running → Running → Deactivated → Stopped → Running(恢复)或 Not Running(终止)。
Window 事件:Created(原生窗口分配)、Activated(获得输入焦点)、Deactivated(失去焦点,可能仍可见)、Stopped(不再可见)、Resumed(从 Stopped 返回前台)、Destroying(原生窗口销毁)。可在 App 类重写 CreateWindow 附加处理程序,或创建 Window 子类重写 OnActivated、OnStopped、OnResumed、OnDestroying 等虚方法。
状态保存流程:识别临时状态(草稿文本、滚动位置、表单输入、计时器值);在 OnStopped 用 Preferences 保存小值或文件序列化保存较大状态;在 OnResumed 读回并应用到视图模型;Android 上还需在 OnDestroying 保存,因为返回键可能跳过 Stopped。处理程序应保持快速,1–2 秒内完成,避免 Android ANR 或 iOS 看门狗终止。
平台映射:Android 对应 OnCreate、OnResume、OnPause、OnStop、OnRestart→OnStart→OnResume、OnDestroy;iOS/Mac Catalyst 对应 WillFinishLaunching/SceneWillConnect、DidBecomeActive、WillResignActive、DidEnterBackground、WillEnterForeground、WillTerminate,AddiOS 构建器方法为 .WillFinishLaunching()/.SceneWillConnect()、.OnActivated()、.OnResignActivation()、.DidEnterBackground()、.WillEnterForeground()、.WillTerminate(),注意没有 .DidBecomeActive() 或 .WillResignActive();Windows(WinUI)对应 OnLaunched、Activated(前台/后台)、VisibilityChanged、Closed。
常见陷阱:首次启动不触发 Resumed,初始序列为 Created → Activated;Deactivated ≠ Stopped,弹窗、分屏或下拉通知只触发 Deactivated,不应在此做重保存;Android 返回键可能直接 Destroying;多窗口应用各自独立触发事件;处理程序过长会被终止;不要使用旧版 Xamarin.Forms 生命周期方法(Application.OnStart/OnSleep/OnResume),应优先使用 Window 生命周期事件以支持多窗口。