android - 是否可以持有多个唤醒锁?

标签 android service wakelock

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

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

我想在 Activity 生命周期中持有一个 SCREEN_DIM_WAKE_LOCK 唤醒锁,但由于这种类型不会阻止 CPU 休眠,所以我还需要在扫描新二维码时在 Activity 中获取一个 PARTIAL_WAKE_LOCK,处理完成后在intent service中发布。

SCREEN_DIM_WAKE_LOCK 的目的是避免用户每隔几秒钟按下电源按钮以唤醒设备并能够读取新条码的不便。用户将不得不一个接一个地阅读大量代码,即使是在没有用户交互的短时间间隔内, Activity 也应该存在。

我知道在 Android 中,由于我的应用程序无法控制的几种情况,无法 100% 保证应用程序处于顶部、不关闭或前景,但我想尽我所能。

那么可以持有多个WakeLocks吗?在哪里可以声明 Activity 和服务都可以访问它们? (单例,扩展应用程序?)

最佳答案

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

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

在我看来,我认为您过度考虑了需要 SCREEN_DIM_WAKE_LOCK 的事实,因为这可能会意外耗尽大量电池,但根据您的用例,我可能是错的。

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

在进入屏幕顶部的问题上,我认为您应该在 Activity 进入暂停状态时释放 WakeLock(当另一个 Activity 以某种方式位于屏幕顶部,或有意按下电源按钮时)。因为在这一点上,用户正在与另一个应用交互,你应该尊重它并让它控制自己的行为。在完成之前,您不必放弃服务的部分唤醒锁。

希望对您有所帮助。

关于android - 是否可以持有多个唤醒锁?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12475779/

相关文章:

c# - 存储库和服务层交互问题

android - 唤醒锁在 Nexus 5 上不断抛出异常

android - 我是否需要使用 AlarmManager 和 WakeLock 才能定期使用 LocationClient?

android - android中的动画?

android - Gradle调试并启动应用

android - LayoutAnimationController 可以仅对指定的 View 进行动画处理吗

android - 使用最新的Gradle/Android Studio March 2018解决滑行库的问题

c++ - 服务重启后套接字未释放

service - 如何处理依赖于服务堆栈中的用户 session 的 Redis MQ 请求

Android:如何从 AlarmManager 唤醒 WIFI(或 3G)?