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

如何在Xamarin.Android应用完全关闭时调用MainActivity.cs中的函数?

在Xamarin.Android中实现应用完全关闭后执行函数

问题分析

OnStop()方法仅在应用窗口隐藏(后台运行)时触发,无法区分应用是后台挂起还是完全关闭。要实现完全关闭后执行函数,需要针对Android的应用生命周期特性选择合适的方法。


方案1:重写OnDestroy()方法(适用于用户主动关闭场景)

当用户主动关闭应用(如从最近任务栏划掉、按返回键退出主Activity),主Activity的OnDestroy()会被调用,可在此处执行目标函数:

protected override void OnDestroy()
{
    base.OnDestroy();
    // 执行你的目标函数
    ExecuteYourFunction();
}

注意:如果系统因内存不足直接终止应用进程,OnDestroy()不会被触发,此方法仅覆盖用户主动关闭的场景。


方案2:监听应用进程生命周期(覆盖系统销毁场景)

通过ProcessLifecycleOwner监听整个应用进程的销毁事件,能覆盖用户主动关闭和系统正常终止进程的场景:

  1. 创建自定义Application类,实现生命周期监听:
using Android.App;
using Android.OS;
using Android.Arch.Lifecycle;

[Application]
public class CustomApp : Application, ILifecycleObserver
{
    public CustomApp(IntPtr javaReference, JniHandleOwnership transfer) : base(javaReference, transfer)
    {
    }

    public override void OnCreate()
    {
        base.OnCreate();
        // 注册生命周期观察者
        ProcessLifecycleOwner.Get().Lifecycle.AddObserver(this);
    }

    // 监听进程销毁事件
    [OnLifecycleEvent(Lifecycle.Event.OnDestroy)]
    public void OnProcessDestroyed()
    {
        ExecuteYourFunction();
    }
}
  1. 若需处理系统内存紧张时的回收场景,可在MainActivity中重写OnTrimMemory():
public override void OnTrimMemory(TrimMemory level)
{
    base.OnTrimMemory(level);
    // 系统即将完全回收应用内存时执行
    if (level == TrimMemory.Complete)
    {
        ExecuteYourFunction();
    }
}

总结

  • 仅需处理用户主动关闭:使用OnDestroy()即可。
  • 需覆盖系统销毁场景:结合ProcessLifecycleOwner和OnTrimMemory()。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 18:32:34