Android 是否可以保持多个唤醒锁?

Android 是否可以保持多个唤醒锁?,android,service,wakelock,Android,Service,Wakelock,我正在开发一个小型实用程序应用程序,它扫描二维条形码,然后将每个条形码提交给IntentService,在IntentService中执行更长的任务 显示活动时,应防止设备休眠,直到条形码在服务中处理完毕。如果服务完成了处理,它会自行停止,但活动应该仍然可见 我希望在“活动”生命周期中保持屏幕锁定唤醒锁定唤醒锁定,但由于这种类型不会阻止CPU睡眠,因此在扫描新的2D代码时,我还需要在“活动”中获取部分唤醒锁定,并在处理完后在intent服务中释放它 屏幕暗显唤醒锁定的目的是避免用户每隔几秒钟按一

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

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

我希望在“活动”生命周期中保持屏幕锁定唤醒锁定唤醒锁定,但由于这种类型不会阻止CPU睡眠,因此在扫描新的2D代码时,我还需要在“活动”中获取部分唤醒锁定,并在处理完后在intent服务中释放它

屏幕暗显唤醒锁定的目的是避免用户每隔几秒钟按一次电源按钮唤醒设备并读取新条形码带来的不便。用户将不得不一个接一个地阅读大量代码,即使在没有用户交互的短时间间隔内,活动也应该存在

我知道在安卓系统中,由于我的应用程序无法控制的几个条件,无法100%保证应用程序处于顶部、未关闭或前景化,但我希望尽我所能


所以有可能持有多个WakeLocks?活动和服务在哪里可以声明它们已被访问?(单例,扩展应用程序?

可以保存多个唤醒锁。事实上,当屏幕关闭时,当多个应用程序同时同步时,它一直都在进行。(想象一下,当屏幕被锁定时,你的GMail和Facebook应用程序同时同步。它们彼此不了解,将具有不同的唤醒锁。可能是也可能不是不同类型的唤醒锁)

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

在我看来,我认为你考虑得太多了,你需要一个屏幕调暗唤醒锁,因为这可能会意外地耗尽大量电池,但根据你的使用情况,我可能是错的

所以简单的答案是肯定的。您可以持有多个WakeLocks,Android将(应该)按预期运行。要记住的唯一一件事是正确地释放两个唤醒锁

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


希望这有帮助。

+1。但是我在顶部发布了screen WakeLock,因为我不想让它在我按下对话框时休眠。我假设当对话框在前面时,你不再扫描条形码,因为用户必须响应对话框,如果用户没有及时响应对话框,让系统休眠不是可以吗?是的,这完全取决于睡眠计时器需要多长时间。如果需要3秒钟,按下电源按钮会很烦人。如果需要更长时间,我可以接受。根据工作量的不同,我甚至可能会转储屏幕暗锁。关于部分唤醒锁,我遵循commonsguy的
WakefulIntentService
方法,但我不喜欢每次
onHandleIntent
调用后释放的想法。我不应该在服务即将等待时才释放锁吗?我不熟悉你提到的方法。我的建议是,您应该在工作完成后尽快释放WakeLock,并且对您的服务没有挂起的请求。这样可以让手机尽早进入睡眠状态,节省电池电量。尽管要记住,释放唤醒锁并进入睡眠状态,然后很快醒来并尝试连接到网络,与保持手机处于唤醒状态并保持连接状态相比,可能会花费大量电池。这是因为从睡眠中唤醒通信硬件比让其保持开机更昂贵。