【问题标题】:How to know if a user triggered onDestroy in an Activity and not the system?如何知道用户是否在 Activity 而不是系统中触发了 onDestroy?
【发布时间】:2017-02-13 10:08:55
【问题描述】:

我正在编写一个在后台保持打开并记录用户操作的服务。

现在,如果用户通过按返回键或在最近的应用程序屏幕中滑动应用程序来完成应用程序活动,我也想完成后台服务,但如果 Android 调用 onDestroy,因为方向更改或某些服务仍应在后台运行的其他原因。

为此,我需要知道用户关闭活动或它是否是 android 的代码差异。

对于后退按钮,这是一个简单的修复,只需覆盖 onBackpressed 即可,一切都很好,但是,如果用户将应用从最近的应用屏幕上滑出,则不会调用它。

【问题讨论】:

  • 使用标志来识别回压事件。在方向更改时,您将获得 onConfigurationChanged 系统调用。从最近的屏幕或后台杀死的应用程序(进程)滑动应用程序时,您的应用程序服务 onDestroyed 将被调用。

标签: android android-activity activity-lifecycle android-ondestroy


【解决方案1】:

您可以在调用 onDestroy 时检查 this.isFinishing() 的活动。

在此处查看更多信息Acrivity.onDestroy

【讨论】:

  • P.S.在 onDestroy 中停止服务不是一个好主意,因为在销毁活动时不需要 onDestroy 调用
  • 谢谢我在阅读文档时忽略了这一点。另外,你的P.S.是什么意思? onDestroy() 不是在完成活动时总是被调用吗?我可能会在onPause 上写isFinishing() 来检查是否调用了finish。
  • link 在某些情况下,系统会简单地杀死 Activity 的托管进程而不在其中调用此方法(或任何其他方法),因此不应使用它来执行打算保留的事情在这个过程消失之后。停止服务的好地方是 onStop() 方法并在 onStart() 方法中与 isFinishing() 值相关的重新启动服务
  • @link 这就是为什么我想检查是否由于用户操作或系统调用了 destroy 方法。这样我只会在用户明确终止我的应用程序时终止后台服务。例如,如果您在 android 中滑动最近应用列表的应用,谷歌地图如何关闭在后台运行的导航。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-09-16
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多