我正在开发一个扫描二维条形码的小型实用程序应用程序,然后将每个条形码提交给执行较长任务的IntentService。
当显示活动时,它应该阻止设备休眠,直到在服务中处理条形码。如果服务完成处理,它将自行停止,但活动应该仍然可见。
我想在活动生命周期中持有SCREEN_DIM_WAKE_LOCK WakeLock,但由于此类型不会阻止CPU休眠,我还需要在扫描新的2D代码时在活动中获取PARTIAL_WAKE_LOCK,并在处理后在意图服务中释放它。
SCREEN_DIM_WAKE_LOCK的目的是避免用户每隔几秒钟按下电源按钮以唤醒设备并能够读取新条形码的不便。用户必须一个接一个地阅读大量代码,即使在没有用户交互的短时间间隔内,活动也应该在周围。
我知道在Android中没有100%保证应用程序处于最佳状态,未关闭或由于我的应用程序无法控制的几个条件而被预见,但我想尽我所能。
那么可以容纳多个WakeLocks吗?他们在哪里可以宣布活动和服务都加入? (Singleton,扩展应用程序?)
答案 0 :(得分:10)
可以容纳多个WakeLocks。事实上,当屏幕关闭时,多个应用程序同时同步时,它一直在完成。 (想象一下,当屏幕被锁定时,你的GMail和Facebook应用会同时同步。他们不知道彼此会有不同的WakeLocks。可能是也可能不是不同类型的WakeLocks)
Android将确保满足每个人的期望(换句话说,最大的电池消耗。)
在我看来,我认为你过度思考需要SCREEN_DIM_WAKE_LOCK的事实,因为这可能会意外耗尽很多电池,但根据你的使用情况我可能会出错。
所以简短的答案是肯定的。您可以持有多个WakeLocks,Android将(应该)按预期执行。唯一要记住的是你正确释放两个唤醒锁。
在进入屏幕顶部的问题上,我认为你应该在它进入暂停状态时释放你的活动的WakeLock(当某个其他活动在顶部时,或者故意按下电源按钮)。因为此时,用户正在与另一个应用程序进行交互,您应该尊重它并让它控制自己的行为。在完成之前,您不必放弃服务中的部分唤醒锁定。
希望这有助于。