电池保存和AlarmManager性能

时间:2013-12-16 21:08:28

标签: android handler alarmmanager battery wakelock

我有一个单独的流程应用程序,其中包含一个服务组件(由活动启动并始终运行),具有多个线程。我需要一个应用程序重复暂停(深度睡眠)7秒,然后启动加速度计一段非常短的时间(收集20个样本后加速度计停止),以节省电池。它必须在所有Android平台上运行,最好高于2.3。

我的第一种方法是使用基于Handler的sendMessageDelayed方法(延迟= 7秒)在加速计停止后调用服务组件中的计时器,而不获取部分唤醒锁定。然而,在我看来,这不是一个好方法,因为计时器只计算手机没有睡觉时的滴答声(如果我错了或在这个问题有解决方案,请在这里纠正我)。

我的第二种方法与第一种方法相同,但在调用sendmesssageDelayed之前获取部分唤醒锁定。它工作正常,但电池消耗太多。

所以这里几个问题:

  1. 我应该每隔7秒使用AlarmManager发布一次广播吗?我担心的是,AlarmManager的7秒时间太短,因为它在很长一段时间内内部获取部分唤醒锁。我想知道是否有人对Alarmlock获取Wakelock的最长时间进行了性能分析,或者有另一种方法。我读过其他帖子,说AlarmManager是有效的解决方案,但它在很长一段时间内特别有用。

  2. 如果必须使用AlarmManager,我可以使用在服务组件中维护为公共静态字段的唤醒锁对象来获取广播接收器中的部分唤醒锁(因此可以从应用程序中的任何其他组件轻松访问)吗?

  3. 是否存在从广播接收器访问和使用基于处理程序的对象以通知服务线程收到警报广播的任何问题? (处理程序对象在服务组件中维护为静态公共字段,因此可以从应用程序中的任何其他组件轻松访问它。)

  4. 非常感谢您的帮助

1 个答案:

答案 0 :(得分:0)

如果您使用的服务始终在运行,则无需使用Alarmmanager。处理程序更容易。每7秒就很多,你确定要的吗?我的意思是,如果你提到“节约电池”?保持服务运行是昂贵的,不是服务本身,而是因为它保持清醒,使用果汁。