3

我正在为我的 Android 服务使用一个处理程序,它每 60 分钟(1 小时)重复一些操作,并使用 PartialWakeLock 来保持手机不休眠。但这会导致大量电池使用。

所以决定研究有人在这里写的AlarmManager(我是菜鸟),以便完美地完成这类事情..

但是现在在网上阅读我发现使用AlarmManager 的人仍然需要WakeLock。这是真的吗?

在不耗尽电池的情况下,每 60 分钟(1 小时)运行一个周期的最佳方法是什么?

谢谢

附言

警报管理器 Android 开发者

只要警报接收器的 onReceive() 方法正在执行,警报管理器就会持有 CPU 唤醒锁。这保证了在您完成广播处理之前手机不会休眠。一旦 onReceive() 返回,警报管理器就会释放这个唤醒锁。这意味着在某些情况下,一旦您的 onReceive() 方法完成,手机就会进入睡眠状态。如果您的警报接收器调用了 Context.startService(),则手机可能会在请求的服务启动之前休眠。为防止这种情况,您的 BroadcastReceiver 和Service 将需要实施单独的唤醒锁定策略,以确保手机继续运行直到服务可用。

但似乎我需要 2 个唤醒锁,而只需要 1 个使用处理程序的唤醒锁……是真的吗?

4

3 回答 3

6

我做了很多测试,结果如下:

-Alarm Manager 比使用 handler+wakelock 进行长时间定时操作更省电。

但是您必须对警报启动的活动/服务使用额外的唤醒锁,因为警报管理器唤醒锁不会覆盖它。

即使这种方法使用了两个 WakeLock,电池似乎也更有效率和更长的寿命!在测试期间(2 天),AlarmManager 使用的电池比其他方法少 6 倍。在我自己的情况下...

希望这可以帮助一些人!

于 2011-10-10T13:31:06.963 回答
0

我建议您使用 AlarmManager 来处理间隔为 1 小时的事件。

因为我们不确切知道您要达到什么目标,所以我们无法提供更深入的答案/建议,抱歉。

于 2011-10-05T19:46:33.163 回答
0

我不确定它是否仍然相关,

但答案是:首选使用 AlarmManager。在 AlarmManager 将其唤醒以向您的接收器发送 Intent 并直到服务完成其工作后,您只需要一个 WakeLock 来保持手机运行。因此,与“所有时间”相比,手机只会唤醒几毫秒。

于 2012-07-29T13:48:08.517 回答