Android与Xamarin - 如何在用户关闭应用程序时运行代码?
我发现了如何在应用程序转到后台跟踪,像这样的一些问题/回答: Run code when Android app is closed/sent to backgroundAndroid与Xamarin - 如何在用户关闭应用程序时运行代码?
但我需要运行仅当用户实际关闭应用程序的代码。
为了举例说明:
- 用户点击在概述按钮;
- Android将打开最近应用程序的缩略图图像列表;
- 用户滑动我的应用程序的缩略图以将其删除(这里是我需要运行代码的位置)。
我试图给OnDestroy()
方法添加一些代码,但是当我执行上述步骤时似乎没有调用它。我知道代码的工作原理,因为我已经完成了一个测试,在OnCreate()
开始时我打电话给Finish()
,然后OnDestroy()
被调用,所以我的代码。
我使用Xamarin和MvvmCross,但也欢迎Java代码。
本机android开发人员在这里,我不确定Xamarin是否以某种方式扩展了本机框架,使其成为可能,但在本机上它目前不受支持。
当应用程序被杀死时,操作系统不一定会调用活动'onDestroy
方法,但当活动被终止时。这是非常不同的,因为应用程序可以被杀死,而不需要调用活动'onDestroy
和onDestroy
可以被调用而不会中止应用程序。
我建议查找服务和报警管理器,以实际跟踪何时发生这种情况,结合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());
// ...
}
}