使用Xamarin的Android - 如何在用户关闭应用程序时运行代码?

时间:2016-04-25 20:04:39

标签: c# android xamarin mvvmcross

我发现了一些关于如何跟踪应用程序进入后台的问题/答案,如下所示: Run code when Android app is closed/sent to background

但是我只需要在用户实际关闭应用程序时运行代码。

举例说明:

  1. 用户点击概述按钮;
  2. Android会打开最近应用的缩略图列表;
  3. 用户滑动我的应用的缩略图以将其删除(这是我需要运行代码的地方)。
  4. 我尝试在OnDestroy()方法中添加一些代码,但是当我执行上述步骤时似乎没有调用它。我知道代码有效,因为我已经完成了一项测试,我在Finish()的开头调用OnCreate(),然后调用了OnDestroy(),所以我的代码。< / p>

    我正在使用Xamarin和MvvmCross,但也欢迎使用Java代码。

2 个答案:

答案 0 :(得分:1)

实施并注册Android.Content.IComponentCallbacks2的实例并监听TrimMemory.UiHidden事件:

<强> LifecycleCallbacks

public class LifecycleCallbacks : Java.Lang.Object, Android.Content.IComponentCallbacks2
{
    public void OnTrimMemory(TrimMemory level)
    {
        if (level == TrimMemory.UiHidden)
        {
            Console.WriteLine("Backgrounded...");
        }

    }

    public void OnConfigurationChanged(Configuration newConfig)
    {
    }

    public void OnLowMemory()
    {
    }
}

注册LifecycleCallbacks的实例:

[Activity (Label = "MyApp", MainLauncher = true)]
public class MainActivity : Activity
{
    protected override void OnCreate (Bundle savedInstanceState)
    {
        base.OnCreate (savedInstanceState);

        // ...

        Application.RegisterComponentCallbacks(new LifecycleCallbacks());

        // ...
    }
}

答案 1 :(得分:0)

原生android开发人员在这里,我不确定Xamarin是否以某种方式扩展了本机框架使这成为可能,但本机目前它不受支持。

当应用程序被杀死时,操作系统不一定会调用活动'onDestroy方法,但是当活动被杀死时。它真的不同,因为可以在不调用活动onDestroy的情况下杀死应用程序,并且可以在不杀死应用程序的情况下调用onDestroy

我建议您查看服务和警报管理器,以便在发生这种情况时实际跟踪onDestroyonPause方法。在这种情况下的精度将是你想要的。例如,您可以每分钟调用一次警报进行检查,或者在应用程序被杀死后在其自己的进程中运行后台服务。

有一个comprehensive discussion about this in another question。这是关于本机代码的,但对问题的解释对于理解框架的限制非常有用。