我已在我的应用中使用以下代码实现了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
但在下一次运行中,我没有收到此错误,一切正常。
我没有得到第一次出现这个问题的原因,如果有人可以帮助我,我会很感激 感谢
答案 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();
}