Creé una aplicación que usa la cámara y durante la ejecución de la aplicación la pantalla está siempre encendida.Android: ¿Cómo liberar recursos cuando finaliza la aplicación?
En el método onCreate() que añade el bloqueo:
final PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE);
this.mWakeLock = pm.newWakeLock(PowerManager.SCREEN_DIM_WAKE_LOCK, "My Tag");
this.mWakeLock.acquire();
Y este es el método sobreescrito onStop():
@Override
protected void onStop() {
if(mWakeLock.isHeld())
{
mWakeLock.release();
}
super.onStop();
}
Pero después de la finalización de la aplicación de la pantalla permanece en toda la tiempo y si ejecuto la aplicación de la cámara se encuentra con un error que obviamente aparece porque los recursos de la cámara no se liberan.
¿Alguien sabe cómo liberar todos los recursos en la terminación de la aplicación?
Su sugerencia para no comprobación de estado de bloqueo está bien si la liberación() es una operación idempotente. Si no, es malo. ¿Qué sucede si la aplicación no pudo obtener el bloqueo y desea cerrar la aplicación? – Thushan
Gran comentario. Miré el código fuente de Android. Parece que la única forma en que no puede obtener un bloqueo es si deforma su llamada, en cuyo caso registra un error pero no lanza una excepción. Si llama a release() sin adquirir un candado, emitirá una excepción "WakeLock under-locked". La documentación de acquire() lleva a uno a pensar que si solicita el bloqueo, obtendrá el bloqueo. Pero si debe verificar, entonces debe verificar inmediatamente después de adquirir(), no después de que el programa se haya ejecutado y esté a punto de salir. – Will