我正在尝试使用Android实现以下功能:
当应用程序处于后台时,线程会立即轮询服务器以检索数据并通知用户新数据是否可用。我正在使用服务,很好。
当应用程序处于“活动”使用状态时,即其中一个活动可见时,轮询应该停止,因为它可能会干扰其他用户操作。
我不明白如何检测应用程序的“活动”或“后台”使用之间的转换。 onResume()活动方法似乎没有帮助,因为无论如何,活动可以在“活动”使用期间隐藏或可见。我的理解是,应用程序本身并没有区分两种状态
按下HOME按钮时是否可以相关?还有另一种方法可以区分吗?
我在考虑相当于iPhone的app委托方法applicationDidEnterBackground
。这是用Android思考的正确方法吗?或者我应该使用另一种方法?
谢谢。
答案 0 :(得分:3)
我将引用Activity
Lifecycle。在onResume
和onPause
之间,Activity
是'有效',即它在屏幕上,用户可以与之互动。如果您的活动的onPause
方法被调用,那么您应该假设它不再“活跃”,并且在再次调用onResume
之前,用户无法再与其进行交互。如果您希望在服务中跟踪此信息,则必须手动执行此操作。
通过在Activity#onResume
中调用服务中的方法来增加计数器或设置标志并在onPause
中恢复该更改,这可能是最容易实现的。如果您有多个活动,那么您很可能需要一个计数器,可能是AtomicInteger
,并使用它来确定何时应该恢复轮询。
当计数器达到0时,我可能会等待一小段时间,重新检查它,如果它仍然是0,则恢复轮询。这将解释一个活动onPause
与另一个活动onResume
之间的差距。