android - tutorial - wakelock detector sin root
Si se adquiere un wakelock y mi aplicación falla, ¿qué debo hacer? (1)
Este tipo de problema puede ocurrir con otros aspectos de Android también. Como ejemplo que he encontrado personalmente, si nunca liberas un objeto de la cámara y la aplicación se bloquea, la cámara no estará disponible hasta que el usuario se reinicie. Puede manejar este tipo de situaciones de la siguiente manera:
// Store the default uncaughtexceptionhandler in a variable.
private Thread.UncaughtExceptionHandler previousHandler = Thread.currentThread().getUncaughtExceptionHandler(originalExceptionHandler);
@Override
public void onCreate(Bundle bundle){
Thread.currentThread().setUncaughtExceptionHandler(new Thread.UncaughtExceptionHandler(){
@Override
public void uncaughtException(Thread thread, Throwable ex) {
try{
// release your wakelock here.
}
catch(Exception e){
// log
}
finally{
thread.setUncaughtExceptionHandler(previousHandler);
previousHandler.uncaughtException(thread, ex);
thread.setUncaughtExceptionHandler(previousHandler);
};
}
});
}
Lo que estás haciendo aquí es anular el comportamiento de bloqueo normal cuando se produce una excepción y darte tiempo para liberar los puntos problemáticos que realmente deben limpiarse antes de que la aplicación se bloquee por completo y no tengas ninguna esperanza de recuperación.
Mi aplicación tiene un servicio de fondo en ejecución en todo momento cuando una bandera se establece en verdadero. Si este es el caso, incluso si la aplicación está inactiva, este servicio de fondo aún necesita tiempo de CPU. Si adquiero wakelock (no para propósitos de "pantalla en" sino para este servicio en segundo plano) y luego la aplicación se bloquea o el usuario la bloquea, entonces no puedo liberar este wakelock.
¿Cuál es el resultado esperado?
¿Conoce Android esto y lanza el wakelock?
¿De qué manera debo gestionar esta situación?