安卓:如何知道应用程序何时进入或“后台”模式?

10
我正在尝试在Android中实现以下操作:
  • 当应用在后台运行时,一个线程会定期轮询服务器以获取数据,并在新数据可用时通知用户。我使用Service来完成这个功能。

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

我不明白如何检测应用程序的“活动”或“后台”使用之间的转换。onResume()方法似乎无法帮助,因为在“活动”使用过程中,Activity可以被隐藏或显示。我的理解是,应用程序本身没有区分这两种状态的区别。
它是否与按下HOME按钮有关?是否有另一种方法来区分?
我在思考是否有类似于iPhone应用委托方法applicationDidEnterBackground的等效物。这是正确的Android开发方式吗?还是我应该采用其他方法?

谢谢。


类似于:https://dev59.com/_nA75IYBdhLWcg3wubqn - yanchenko
1个回答

3
我将参考Activity生命周期。在onResumeonPause之间,您的Activity是“活动的”,即它在屏幕上并且用户可以与之交互。如果调用了您的活动的onPause方法,则应假定它不再处于“活动状态”,并且用户无法再与其交互,直到再次调用onResume。如果您希望在服务中跟踪此内容,则需要手动执行此操作。

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

我可能会等待一小段时间,直到计数器达到0,重新检查它,如果仍然为0,则恢复轮询。这将解决一个活动的onPause和另一个活动的onResume之间的间隙。


我终于在根活动上完成了它:只要根活动消失(无论是因为应用程序被离开还是因为后续活动覆盖了它),我就会触发服务。正如您建议的那样,我随后触发一个计时器,然后开始轮询。如果根活动在计时器到期之前重新出现,则停止服务。我将您的答案标记为有帮助,感谢您。 - user244129
4
问题的答案没有提供...问题是如何识别整个APP进入后台,而不仅仅是一个Activity。 - Dany's

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接