新建项目步骤
- 打开 Visual Studio
- 创建新项目,选择 Xamarin.Forms 空白应用,项目命名
AppLifecycleTutorial - 在解决方案资源管理器,打开共享项目,双击
App.xaml.cs文件
重写生命周期方法
打开 App.xaml.cs,在 App 类内部重写三个生命周期回调方法:
using Xamarin.Forms;
namespace AppLifecycleTutorial
{
public partial class App : Application
{
public App()
{
InitializeComponent();
MainPage = new MainPage();
}
/// <summary>
/// 应用启动时触发,只执行一次
/// </summary>
protected override void OnStart()
{
Console.WriteLine("OnStart");
}
/// <summary>
/// 应用进入后台(最小化、切换别的App、锁屏)触发
/// 注意:应用被系统杀死时,**不会执行 OnSleep**
/// </summary>
protected override void OnSleep()
{
Console.WriteLine("OnSleep");
}
/// <summary>
/// 应用从后台切回前台恢复显示时触发
/// </summary>
protected override void OnResume()
{
Console.WriteLine("OnResume");
}
}
}
Code language: PHP (php)
三个生命周期方法说明
| 方法 | 触发时机 | 说明 |
|---|---|---|
OnStart() | 应用程序启动 | App第一次运行调用,整个进程生命周期只调用1次;从后台切回前台不会再次执行 |
OnSleep() | 应用转入后台 | 用户按Home键、打开其他App、锁屏,App被遮挡进入后台;在这里保存临时状态、数据 |
OnResume() | 后台切回前台 | App从后台重新回到可见界面;注意:刚启动不会调用OnResume,只有从后台恢复才调用 |
执行流程
- App冷启动:
OnStart()→ 应用运行在前台 - 按Home键切后台:
OnSleep() - 重新点开App回到前台:
OnResume() - 再次切后台:
OnSleep()
重要注意:
- iOS/Android平台行为有差异:Android上内存紧张,系统直接杀掉进程,此时不会执行
OnSleep,不要把完全依赖保存逻辑只写在OnSleep;OnStart只会程序刚打开执行,后台唤醒不会再次进入OnStart;- Console.WriteLine 在VS输出窗口(输出窗口,选择“调试”)查看打印日志。
补充
Xamarin.Forms 的生命周期是应用级生命周期(整个App),不等于页面 Page 的生命周期(OnAppearing / OnDisappearing)。
- App 级别:
OnStart / OnSleep / OnResume→ 管控整个程序 - Page页面级别:
OnAppearing(页面即将显示)、OnDisappearing(页面即将消失),管控单个页面。
Previous: 跨生命周期状态更改保留数据