You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Maui Blazor:Destroying事件在Windows触发但Android不触发

MAUI Blazor Android平台Window.Destroying事件不触发的解决办法

在MAUI Blazor中使用Window.Destroying事件保存数据时,Windows平台可正常触发,但Android平台无法触发,核心原因是Android与Windows的应用生命周期机制存在差异:Android上Window.Destroying事件仅在极端场景(如系统强制回收应用进程)下才会触发,用户正常退出、将应用切到后台等常规操作不会触发该事件。

可靠的替代方案

改用MAUI应用级的生命周期方法,这些方法在Android平台的常规操作流程中会稳定触发:

方法1:重写App类的OnSleep和OnStop方法

OnSleep在应用被切换到后台时触发,OnStop在应用即将停止运行时触发,两者覆盖了Android上需要保存数据的主要场景,同时也兼容Windows平台。

修改App.xaml.cs代码如下:

public partial class App : Application
{
    public App()
    {
        InitializeComponent();
        MainPage = new MainPage();
    }

    protected override Window CreateWindow(IActivationState activationState)
    {
        var window = base.CreateWindow(activationState);
        // 可保留Windows平台的Destroying事件(OnStop也会触发,可选)
        window.Destroying += (s, e) =>
        {
            ShoppingApp.Model.DataManager.saveData();
        };
        return window;
    }

    protected override void OnSleep()
    {
        base.OnSleep();
        ShoppingApp.Model.DataManager.saveData();
    }

    protected override void OnStop()
    {
        base.OnStop();
        ShoppingApp.Model.DataManager.saveData();
    }
}

方法2:平台特定处理(可选)

如果需要针对Android单独绑定逻辑,可通过条件编译在Android平台的Activity生命周期中处理:

在Platforms/Android/MainActivity.cs中修改:

namespace ShoppingApp.Platforms.Android;

[Activity(Theme = "@style/Maui.SplashTheme", MainLauncher = true, ConfigurationChanges = ConfigChanges.ScreenSize | ConfigChanges.Orientation | ConfigChanges.UiMode | ConfigChanges.ScreenLayout | ConfigChanges.SmallestScreenSize | ConfigChanges.Density)]
public class MainActivity : MauiAppCompatActivity
{
    protected override void OnPause()
    {
        base.OnPause();
        ShoppingApp.Model.DataManager.saveData();
    }

    protected override void OnDestroy()
    {
        base.OnDestroy();
        ShoppingApp.Model.DataManager.saveData();
    }
}

注意事项

  • 避免在这些生命周期方法中执行耗时操作,否则可能导致Android系统抛出ANR(应用无响应)错误。如果保存操作复杂,建议异步执行并确保在方法返回前完成(可谨慎使用Task.Run().Wait())。
  • 测试时需覆盖Android的多种场景:按返回键退出应用、按Home键切到后台、多任务切换后杀死应用进程等,确保数据保存逻辑稳定触发。

内容的提问来源于stack exchange,提问作者MauiRider

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.28 22:20:09