Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/192.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 安卓:如何知道应用程序何时进入或;背景“;模式_Android_Background - Fatal编程技术网

Android 安卓:如何知道应用程序何时进入或;背景“;模式

Android 安卓:如何知道应用程序何时进入或;背景“;模式,android,background,Android,Background,我正试图通过Android实现以下目标: 当应用程序在后台时,线程会不时轮询服务器以检索数据,并通知用户是否有新数据可用。我正在使用一种服务,很好 当应用处于“活动”使用状态时,即其活动之一可见,轮询应停止,因为它可能会干扰其他用户操作 我不明白如何检测应用程序的“活动”或“后台”使用之间的转换。onResume()活动方法似乎没有帮助,因为活动在“活动”使用期间可能隐藏或可见。我的理解是,应用程序本身并不能区分这两种状态。 当按下HOME(主页)按钮时,它是否相关?有没有其他方法来进行区分

我正试图通过Android实现以下目标:

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

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

我不明白如何检测应用程序的“活动”或“后台”使用之间的转换。onResume()活动方法似乎没有帮助,因为活动在“活动”使用期间可能隐藏或可见。我的理解是,应用程序本身并不能区分这两种状态。
当按下HOME(主页)按钮时,它是否相关?有没有其他方法来进行区分?
我正在考虑一种类似于iPhone的应用程序委托方法
applicationidenterdbackground
。这是Android的正确思维方式吗?还是我应该用另一种方法


谢谢。

我要参考一下。在
onResume
onPause
之间,您的
活动
处于“活动”状态,即,它在屏幕上,用户可以与其交互。如果您的活动的
onPause
方法被调用,那么您应该假设它不再是“活动”的,并且在再次调用
onResume
之前,用户不能再与其交互。如果您希望在您的服务中跟踪这一点,则必须手动执行此操作

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


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

之间的差距,类似的:我最终只在根活动上执行了此操作:一旦根活动消失(因为应用程序离开或后续活动覆盖了它),我就会触发服务。正如您所建议的,我随后触发计时器,然后开始轮询。如果根活动在计时器过期之前重新出现,则服务将停止。我勾选你的答案,因为它对我有帮助,谢谢。问题的答案没有给出。。。问题是你如何认识到整个应用程序都是在后台运行的,而不仅仅是一个活动