.NET MAUI中Window.Resumed方法无法触发,求解决方案
问题:设备休眠恢复后调用指定方法失效的解决方案
希望实现场景:当设备进入休眠模式后恢复至应用时,调用指定方法。尝试以下代码但无法正常工作:
protected override Window CreateWindow(IActivationState activationState) { var window = base.CreateWindow(activationState); window.MinimumHeight = PhotoScannerConstants.WINDOW_HEIGHT; window.MinimumWidth = PhotoScannerConstants.WINDOW_WIDTH; window.Activated += OnActivated; window.Resumed += Resumed; return window; }
已创建OnActivated和Resumed方法。
解决方案
- 调整事件监听对象:MAUI中
Window.Resumed事件的触发逻辑和设备休眠恢复场景不匹配,应该改用Application级别的Resume事件来监听设备从休眠恢复到应用的场景。 - 两种可行实现方式:
方式1:重写App类的OnResume方法
在App.xaml.cs中直接重写框架提供的生命周期方法,代码更简洁:
public partial class App : Application { protected override void OnResume() { base.OnResume(); // 执行休眠恢复后的目标方法 ExecutePostWakeMethod(); } private void ExecutePostWakeMethod() { // 这里编写你的业务逻辑 } }
方式2:绑定Application.Resumed事件
如果需要在Window类内部处理逻辑,可以在窗口初始化时绑定事件,记得销毁时解绑避免内存泄漏:
public YourCustomWindow() { InitializeComponent(); // 绑定应用恢复事件 Application.Current.Resumed += HandleAppResumed; } private void HandleAppResumed(object sender, EventArgs e) { // 调用指定方法 ExecutePostWakeMethod(); } protected override void OnDisappearing() { base.OnDisappearing(); // 解绑事件 Application.Current.Resumed -= HandleAppResumed; } private void ExecutePostWakeMethod() { // 这里编写你的业务逻辑 }
- 额外说明:
Window.Activated事件会在窗口从后台切到前台时触发,但它包含的场景不止休眠恢复(比如用户切换到其他应用再切回)。如果需要严格区分休眠恢复和普通前台切换,需结合各平台原生的电源管理API判断设备唤醒状态。
内容的提问来源于stack exchange,提问作者Hiren Dhamecha
相关产品推荐
相关产品推荐

