Las variables pm
y keepScreenOn
están definidas globalmente.WakeLock finalizado mientras aún estaba ocupado
me agarra el PowerManager.WakeLock en mi método OnCreate:
pm = (PowerManager) getSystemService(Context.POWER_SERVICE);
keepScreenOn = pm.newWakeLock(PowerManager.SCREEN_BRIGHT_LOCK,"tpd");
en mi onStart, onResume y onRestart agarro la cerradura con
if (keepScreenOn == null) {
keepScreenOn = pm.newakeLock(PowerManager,SCREEN_BRIGHT_LOCK,"tpd");
}
keepScreenOn.acquire();
en mi OnDestroy, onPause y onStop Suelte el bloqueo con:
if (keepScreenOn != null) {
keepScreenOn.release();
keepScreenOn = null
}
Después de que mi aplicación sale, aparece una pantalla de error y adb compl AINS que
java.lang.Exception: WakeLock finalizado al tiempo que celebró: tpd
Rastreo muestra que solté la cerradura antes de la salida. ¿Qué me he perdido?
No hay manera de salir de la aplicación sin tener que cruzar al menos uno de , onStop
o onDestroy
. Puedo ver que la aplicación llama a release()
tan a menudo como se llama a acquire() así que aunque el contador de tiempo se cuente como referencia, todavía debería tener cero referencias.
Puede ser que no esté relacionado con su problema, pero ¿por qué está creando y liberando el bloqueo en tantos lugares? ¿Por qué no hacerlo solo en onResume y onPause? – Olegas
Lo intenté. Luego rastreé cada rutina onXXX. Luego lo agregué –
¿Su variable 'keepScreenOn' se declara solo una vez en una clase? ¿Hay algunas otras declaraciones con menor alcance (es decir, declaradas en el método). – Olegas