android – 有可能持有多个唤醒锁吗?

我正在开发一个扫描二维条形码的小型实用程序应用程序,然后将每个条形码提交给执行较长任务的IntentService.

显示活动时,应该防止设备休眠,直到在服务中处理条形码.如果服务完成处理,它将自行停止,但活动仍应可见.

我想在活动生命周期中持有一个SCREEN_DIM_WAKE_LOCK WakeLock,但由于这种类型不会阻止CPU休眠,我还需要在扫描新的二维码时在活动中获取PARTIAL_WAKE_LOCK,然后释放它在处理后的意图服务中.

SCREEN_DIM_WAKE_LOCK的目的是避免用户每隔几秒钟按下电源按钮以唤醒设备并能够读取新条形码的不便.用户必须一个接一个地读取大量代码,并且即使在没有用户交互的短时间间隔内,活动也应该在周围.

我知道在Android中没有100%保证应用程序处于最顶层,没有关闭或由于我的应用程序无法控制的几个条件而预见,但我想尽可能地去.

那么可以持有多个WakeLocks吗?他们在哪里可以宣布活动和服务都加入? (Singleton,扩展应用程序?)

解决方法

可以容纳多个WakeLocks.事实上,当屏幕关闭时,多个应用程序同时同步时,它一直在完成. (想象一下,当屏幕被锁定时,你的GMail和Facebook应用会同时同步.他们不知道彼此会有不同的WakeLocks.可能是也可能不是不同类型的WakeLocks)

Android将确保满足每个人的期望(换句话说,最大的电池消耗.)

在我看来,我认为你过度思考需要一个SCREEN_DIM_WAKE_LOCK,因为这可能会意外地耗尽大量电池,但根据你的使用情况我可能会出错.

所以简短的答案是肯定的.你可以拥有多个WakeLocks,Android将(应该)按预期行事.唯一要记住的是你正确释放两个唤醒锁.

在进入屏幕顶部的问题上,我认为你应该在进入Paused状态时释放你的活动的WakeLock(当某个时候另一个活动在顶部,或者故意按下电源按钮).因为此时,用户正在与另一个应用程序进行交互,您应该尊重它并让它控制自己的行为.在完成之前,您不必放弃服务中的部分唤醒锁定.

希望这可以帮助.

相关文章

文章浏览阅读8.8k次,点赞9次,收藏20次。本文操作环境:win1...
文章浏览阅读1.2w次,点赞15次,收藏69次。实现目的:由main...
文章浏览阅读3.8w次。前言:最近在找Android上的全局代理软件...
文章浏览阅读2.5w次,点赞17次,收藏6次。创建项目后,运行项...
文章浏览阅读8.9w次,点赞4次,收藏43次。前言:在Android上...
文章浏览阅读1.1w次,点赞4次,收藏17次。Android Studio提供...