2013-12-16 64 views
2

我有一个单独的进程应用程序,它包含一个服务组件(由活动启动并始终运行)和多个线程。我需要一个应用程序重复暂停(深度睡眠)7秒钟,然后在非常短的时间内启动加速度计(收集20个样本后加速度计停止)以节省电量。它必须在2.3以上的所有Android平台上运行。电池保护和AlarmManager性能

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

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

所以在这里几个问题:

  1. 我应该使用AlarmManager火,每七秒的广播?我担心的是AlarmManager的时间太短,因为它在内部获得了大量时间的部分唤醒锁。我想知道是否有人在AlarmManager获取Wakelock的最长时间内做过性能分析,或者有其他方法。我阅读了其他一些表示AlarmManager是有效的解决方案的文章,但它在很长一段时间内特别有用。

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

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

非常感谢您的帮助

+0

解决了吗?如果是的话 - 你能否把你的解决方案写成答案? – ransh

回答

0

如果您使用的始终运行有没有必要使用Alarmmanager的服务。处理程序更容易。每7秒钟很多,你确定你想要吗?我的意思是,如果你提到“电池保护”?保持服务运行是昂贵的,而不是服务本身,而是保持使用果汁的东西。

+0

感谢您的评论。我在想,我需要AlarmManager,因为我确实想暂停服务运行7秒,然后用部分唤醒锁启动它。不幸的是我需要部分唤醒锁,否则加速度计不会产生好的结果。 – user3107977