Android WakeLock无法首次运行

时间:2016-09-08 07:06:36

标签: android android-studio wakelock

我已在我的应用中使用以下代码实现了wakelock:

PowerManager powerManager = (PowerManager)getSystemService(POWER_SERVICE);
PowerManager.WakeLock wakeLock = powerManager.newWakeLock(PowerManager.FULL_WAKE_LOCK,"MyWakelockTag");
wakeLock.acquire();

我想在用户进入我的应用时阻止屏幕关闭。奇怪的是,在第一次运行应用程序时(安装后)它不起作用并且屏幕熄灭,但是之后如果我关闭应用程序并再次运行它,唤醒锁定工作并阻止应用程序关闭。登记/> 我注意到我第一次在日志中收到此错误:

WakeLock finalized while still held: MyWakelockTag

但在下一次运行中,我没有收到此错误,一切正常。

我没有得到第一次出现这个问题的原因,如果有人可以帮助我,我会很感激 感谢

2 个答案:

答案 0 :(得分:0)

好的我相信我发现了问题。

WakeLock是引用计数。这意味着如果第二次获取()发生,它将只是碰撞引用计数。每次调用acquire()都需要通过调用isHeld()来保护,如下所示:

if ((keepScreenOn != null) && (keepScreenOn.isHeld() == false)) {
keepScreenOn.acquire();
}

我曾假设我持有的锁上的acquire()没有做任何事情因此多次acquire()调用导致了这个问题。由于引用计数不为零,因此GC会抛出错误。

答案 1 :(得分:0)

我在第一次运行应用程序时遇到的错误是:

WakeLock finalized while still held: MyWakelockTag

解决方案是在onDestroy中添加这一行:

if(wakeLock.isHeld()){
 wakeLock.release();
}