Moi*_*nez 13 android alarmmanager android-handler
我正在编写一个不断轮询设备传感器的应用程序,并且经常会将一些统计信息记录到文件中.这可能是每秒一次或每分钟一次慢.我应该使用Handler's postDelayed()方法还是只安排它AlarmManager?
cgr*_*cgr 12
根据以下要点确定您的设计:
AlarmManager:
它的优点AlarmManager是即使设备处于深度睡眠模式(CPU关闭)也能正常工作.当警报触发时,它会触发BroadcastReceiver并进入onReceive,它会获取唤醒锁定(如果您使用过WAKEUP类型的警报,RTC_WAKEUP或者ELAPSED_TIME_WAKEUP).完成后,onReceive()它会释放唤醒锁.
但大部分时间它都不适合我.所以我已经获得了自己的唤醒锁onReceive()并在最后释放它们以确保我真正获得CPU.
它不能工作的原因是,当多个应用程序同时使用资源(例如阻止系统挂起的唤醒锁定)时,框架会在这些应用程序之间传播CPU消耗,尽管不一定相同.因此,如果它是关键的,那么获取唤醒锁并做这些事情总是更好.
定时器和处理程序:
Handler和定时器在深度睡眠模式下不起作用,这意味着当设备处于睡眠状态时,任务/可运行不会按照计划运行.它们不计算睡眠时间,这意味着执行任务的延迟仅在活动模式下计算.因此,实际延迟将是延迟给定+深度睡眠时间.
paw*_*eba 11
如果应用程序应该在待机状态下工作AlarmManager.如果没有那么Handler.
AlarmManager将唤醒CPU因此它将更多地耗尽电池,而Handler不会在待机状态下工作.
我想说这取决于轮询间隔。我猜你的情况相当低(大约几秒),所以你应该采用 Handler 方式,或者使用 Timer 类。
AlarmManger 是一个更高级别的服务,处理此用例需要更大的开销。当警报触发时,您需要使用广播接收器来处理它。这意味着每次处理这些警报之一时,您都需要为您感兴趣的传感器注册侦听器,恕我直言,这是非常低效的。
| 归档时间: |
|
| 查看次数: |
7727 次 |
| 最近记录: |