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

问题描述:

我发现了如何在应用程序转到后台跟踪,像这样的一些问题/回答: Run code when Android app is closed/sent to backgroundAndroid与Xamarin - 如何在用户关闭应用程序时运行代码?

但我需要运行仅当用户实际关闭应用程序的代码。

为了举例说明:

  1. 用户点击在概述按钮;
  2. Android将打开最近应用程序的缩略图图像列表;
  3. 用户滑动我的应用程序的缩略图以将其删除(这里是我需要运行代码的位置)。

我试图给OnDestroy()方法添加一些代码,但是当我执行上述步骤时似乎没有调用它。我知道代码的工作原理,因为我已经完成了一个测试,在OnCreate()开始时我打电话给Finish(),然后OnDestroy()被调用,所以我的代码。

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

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

当应用程序被杀死时,操作系统不一定会调用活动'onDestroy方法,但当活动被终止时。这是非常不同的,因为应用程序可以被杀死,而不需要调用活动'onDestroyonDestroy可以被调用而不会中止应用程序。

我建议查找服务和报警管理器,以实际跟踪何时发生这种情况,结合onDestroy和方法。在这种情况下,精度将会达到您想要的水平。您可以每分钟调用一次警报来检查它,或者在自己的进程中运行后台服务,该服务在应用程序被终止后保持活动状态。

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

实现并注册的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()); 

     // ... 
    } 
}