我发现了一些关于如何跟踪应用程序进入后台的问题/答案,如下所示: Run code when Android app is closed/sent to background
但是我只需要在用户实际关闭应用程序时运行代码。
举例说明:
我尝试在OnDestroy()
方法中添加一些代码,但是当我执行上述步骤时似乎没有调用它。我知道代码有效,因为我已经完成了一项测试,我在Finish()
的开头调用OnCreate()
,然后调用了OnDestroy()
,所以我的代码。< / p>
我正在使用Xamarin和MvvmCross,但也欢迎使用Java代码。
答案 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
。
我建议您查看服务和警报管理器,以便在发生这种情况时实际跟踪onDestroy
和onPause
方法。在这种情况下的精度将是你想要的。例如,您可以每分钟调用一次警报进行检查,或者在应用程序被杀死后在其自己的进程中运行后台服务。
有一个comprehensive discussion about this in another question。这是关于本机代码的,但对问题的解释对于理解框架的限制非常有用。