Переменные pm
и keepScreenOn
определяются глобально.
Я захватил PowerManager.WakeLock в моем методе OnCreate:
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
, onStop
или onDestroy
. Я вижу, что приложение называется
release()
так часто, как он называется gets(), так что хотя
wakelock ссылается на ссылку, он должен по-прежнему иметь нулевые ссылки.