Android应用程序如何检测其活动是否处于活动状态?

时间:2011-10-26 16:50:27

标签: android

我们有一个Android应用程序,定期轮询数据并更新显示。轮询由后台线程执行。不幸的是,这个后台线程不断运行,即使我们的应用程序在屏幕外或设备被锁定时,这也会导致不必要的网络活动和CPU /电池使用。

所以,我想更改应用程序,以便在这些情况下暂停其投票活动:

  • 当应用程序的活动都不在前台时。
  • 设备锁定时。

检测应用是否处于这两种状态之一的最简单方法是什么?

注意:该应用程序有几个活动,所以我认为它不像跟踪活动生命周期事件那么简单。我必须为每个活动添加代码,以跟踪我的活动的任何是否在前台。如果这就是我需要做的事情,我会做,但我希望有一个更简单的方法。


这些是一些相关的问题,但似乎没有提供一个好的答案:

2 个答案:

答案 0 :(得分:4)

  

检测应用是否处于这两种状态之一的最简单方法是什么?

对于我们在前台的问题,在每个活动的onStart()中增加静态数据成员中的引用计数,并在onStop()中递减它。如果onStop()看到0,请停止投票。如果onStart()发现您没有投票,请开始投票。

对于屏幕锁定问题,请不要担心。一旦屏幕超时,设备将处于睡眠状态,并且您的轮询线程将不会运行。此外,我认为无论如何你的活动都会停止。

顺便说一句,这是onStop()是正确答案的一种情况,而不是onPause(),因此the lifecycle handoff between your activities处理得当。

  

如果这就是我需要做的事情,我会这样做,但我希望有一种更简单的方法。

这很简单。

答案 1 :(得分:1)

我的直觉说,你在想这个错误。你认为在没有必要的时候需要缩减你的民意调查是正确的,但是根本不进行民意调查怎么样?您可以使用推送范例(请参阅长轮询或Android Cloud To Device Messaging)。如果您进行此轮询以保持资源同步,您可能还想检查android SyncAdapter