【问题标题】:Android : how to know when an app enters or the "background" mode?Android:如何知道应用程序何时进入或“后台”模式?
【发布时间】:2013-10-22 03:17:27
【问题描述】:

我正在尝试使用 Android 实现以下目标:

  • 当应用程序处于后台时,线程会不时地轮询服务器以检索数据并通知用户是否有新数据可用。我正在为此使用服务,很好。

  • 当应用处于“活动”使用状态时,即其中一个活动可见,轮询应停止,因为它可能会干扰其他用户操作。

我不明白如何检测应用的“活跃”或“后台”使用之间的转换。 onResume() 活动方法似乎没有帮助,因为无论如何在“活动”使用期间活动可以隐藏或可见。我的理解是,应用程序本身不会影响这两种状态。
按下HOME按钮时可以关联吗?还有其他方法可以区分吗?
我正在考虑等效于 iPhone 的应用程序委托方法applicationDidEnterBackground。用 Android 来思考是否正确?还是我应该使用其他方法?

谢谢。

【问题讨论】:

标签: android background


【解决方案1】:

我将引用Activity Lifecycle。在onResumeonPause 之间,您的Activity 处于“活动状态”,即它在屏幕上并且用户可以与之交互。如果您的活动的onPause 方法被调用,那么您应该假设它不再是“活动的”并且用户不能再与它交互,直到再次调用onResume。如果您希望在您的服务中跟踪这一点,您将不得不手动执行此操作。

这可能最容易通过在Activity#onResume 中调用服务中的方法来增加计数器或设置标志,并在onPause 中恢复该更改。如果您有多项活动,那么您很可能需要一个计数器,可能是AtomicInteger,并使用它来确定何时应该恢复轮询。

当计数器达到 0 时,我可能会等待一小段时间,重新检查它,如果它仍然是 0,则继续轮询。这将解释一个活动的onPause 和另一个活动的onResume 之间的差距。

【讨论】:

  • 我最后只在根活动上这样做了:一旦根活动消失(因为应用程序被留下或因为后续活动覆盖它),我触发服务。按照您的建议,然后我触发一个计时器,然后开始轮询。如果在计时器到期之前根活动重新出现,则停止服务。我打勾你的答案,因为它对我有帮助,谢谢。
  • 没有给出问题的答案......问题是你如何识别整个APP进入后台,而不仅仅是一个Activity
猜你喜欢
  • 1970-01-01
  • 2013-06-12
  • 1970-01-01
  • 2018-03-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多