pm
和keepScreenOn
变量是全局定义的。
我在 OnCreate 方法中获取 PowerManager.WakeLock:
pm = (PowerManager) getSystemService(Context.POWER_SERVICE);
keepScreenOn = pm.newWakeLock(PowerManager.SCREEN_BRIGHT_LOCK,"tpd");
在我的 onStart、onResume 和 onRestart 中,我用
if (keepScreenOn == null) {
keepScreenOn = pm.newakeLock(PowerManager,SCREEN_BRIGHT_LOCK,"tpd");
}
keepScreenOn.acquire();
在我的 onDestroy、onPause 和 onStop 中,我使用以下命令释放锁:
if (keepScreenOn != null) {
keepScreenOn.release();
keepScreenOn = null
}
在我的应用程序退出后,我得到一个失败屏幕并且 adb 抱怨说
java.lang.Exception:WakeLock 在仍被持有时完成:tpd
跟踪显示我在退出之前释放了锁。我错过了什么?
如果不跨越、 或中的至少一个,就无法退出应用
onPause
程序。我可以看到应用程序调用
的频率与调用 acquire() 一样频繁,因此即使唤醒锁是引用计数的,它仍然应该具有零引用。onStop
onDestroy
release()