我们有一个Android应用程序,定期轮询数据并更新显示。轮询由后台线程执行。不幸的是,这个后台线程不断运行,即使我们的应用程序在屏幕外或设备被锁定时,这也会导致不必要的网络活动和CPU /电池使用。
所以,我想更改应用程序,以便在这些情况下暂停其投票活动:
检测应用是否处于这两种状态之一的最简单方法是什么?
注意:该应用程序有几个活动,所以我认为它不像跟踪活动生命周期事件那么简单。我必须为每个活动添加代码,以跟踪我的活动的任何是否在前台。如果这就是我需要做的事情,我会做,但我希望有一个更简单的方法。
这些是一些相关的问题,但似乎没有提供一个好的答案:
答案 0 :(得分:4)
检测应用是否处于这两种状态之一的最简单方法是什么?
对于我们在前台的问题,在每个活动的onStart()
中增加静态数据成员中的引用计数,并在onStop()
中递减它。如果onStop()
看到0
,请停止投票。如果onStart()
发现您没有投票,请开始投票。
对于屏幕锁定问题,请不要担心。一旦屏幕超时,设备将处于睡眠状态,并且您的轮询线程将不会运行。此外,我认为无论如何你的活动都会停止。
顺便说一句,这是onStop()
是正确答案的一种情况,而不是onPause()
,因此the lifecycle handoff between your activities处理得当。
如果这就是我需要做的事情,我会这样做,但我希望有一种更简单的方法。
这很简单。
答案 1 :(得分:1)
我的直觉说,你在想这个错误。你认为在没有必要的时候需要缩减你的民意调查是正确的,但是根本不进行民意调查怎么样?您可以使用推送范例(请参阅长轮询或Android Cloud To Device Messaging)。如果您进行此轮询以保持资源同步,您可能还想检查android SyncAdapter。