在pm和keepScreenOn变量是全局定义.
我在OnCreate方法中获取了PowerManager.WakeLock:
pm = (PowerManager) getSystemService(Context.POWER_SERVICE);
keepScreenOn = pm.newWakeLock(PowerManager.SCREEN_BRIGHT_LOCK,"tpd");
Run Code Online (Sandbox Code Playgroud)
在我的onStart,onResume和onRestart中我抓住了锁
if (keepScreenOn == null) {
keepScreenOn = pm.newakeLock(PowerManager,SCREEN_BRIGHT_LOCK,"tpd");
}
keepScreenOn.acquire();
Run Code Online (Sandbox Code Playgroud)
在我的onDestroy,onPause和onStop中,我发布了锁定:
if (keepScreenOn != null) {
keepScreenOn.release();
keepScreenOn = null
}
Run Code Online (Sandbox Code Playgroud)
我的应用程序退出后,我得到一个失败的屏幕,adb抱怨
java.lang.Exception:WakeLock在仍然持有时完成:tpd
跟踪显示我在退出前释放了锁.我错过了什么?
有没有办法退出应用,而不穿过的至少一个
onPause,onStop或onDestroy.我可以看到应用程序
release()经常被称为acquire(),因此即使唤醒锁被引用计数,它仍然应该没有引用.