电池影响:后台服务+ BroadcastReceiver VS使用AlarmManager每分钟轮询一次?

时间:2014-11-11 05:39:19

标签: android performance android-intent battery processing-efficiency

我正在编写一个应用程序,需要检测屏幕何时从背景开启或关闭(精度约为1分钟)。理想情况下,我只是静态注册Intent.ACTION_SCREEN_ON和Intent.ACTION_SCREEN_OFF,但不可避免地,这是不允许的。

这给我留下了两个不那么伟大的---实际上非常可怕的选择(除非有一些我不知道的东西,很可能):

  1. 运行一个无所不在的Service + BroadcastReceiver,它注册ACTION_SCREEN_ON和OFF意图OR
  2. 使用AlarmManager安排一些代码每分钟运行一次,并使用isInteractive()
  3. 检查显示是否开启/关闭

    #1不是很好,因为它可以被杀死,它浪费内存,它需要运行onboot,当安装在SD卡上时不能正常运行等等。列表继续。

    #2并不是很好,因为它不太精确......让我们面对它 - 民意调查几乎不是正确答案

    但最糟糕的是,它们都会对电池寿命产生负面影响。这实际上是恕我直言最重要的因素。

    TL; DR

    在电池寿命影响方面,这两个罪恶中哪一个较小?

1 个答案:

答案 0 :(得分:0)

我不是一个Android开发人员(但它很有趣)但是在阅读AlarmManager类概述时,它表示如果应用程序尚未运行,它将定期启动它。这不是轮询,因为代码没有运行,不会影响性能或保持处理器唤醒(消耗能量)。我确定AlarmManager类本身也没有轮询。

您可能还会考虑暂停您的申请流程并定期将其唤醒。启动流程通常是一项昂贵的操作。虽然暂停应用程序并不会消耗处理器资源(因此会影响功耗)但它确实会占用内存。