Ho creato un'applicazione che utilizza la fotocamera e durante l'esecuzione dell'applicazione lo schermo è sempre acceso.Android: come rilasciare le risorse quando l'applicazione termina?
Nel metodo onCreate() ho aggiunto il blocco:
final PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE);
this.mWakeLock = pm.newWakeLock(PowerManager.SCREEN_DIM_WAKE_LOCK, "My Tag");
this.mWakeLock.acquire();
E questo è il metodo sovresposta onStop():
@Override
protected void onStop() {
if(mWakeLock.isHeld())
{
mWakeLock.release();
}
super.onStop();
}
Ma dopo la chiusura lo schermo rimane su tutto il tempo e se eseguo l'applicazione della telecamera, incontra un errore che appare evidentemente perché le risorse della fotocamera non vengono rilasciate.
Qualcuno sa come rilasciare tutte le risorse sulla terminazione dell'applicazione?
tuo suggerimento a non controllare per lo stato di blocco è ok se release() è un'operazione idempotente. In caso contrario, è male. Cosa succede se l'app non è riuscita a ottenere il blocco e desidera chiudere l'app? – Thushan
Grande commento. Ho guardato il codice sorgente di Android. Sembra che l'unico modo in cui non riesci a ottenere un blocco è se malformi la tua chiamata, nel qual caso registra un errore ma non genera un'eccezione. Se si chiama release() senza acquisire un lock, si genera un'eccezione "WakeLock under-locked". La documentazione di acquire() induce a pensare se chiedi il lucchetto, otterrai il lucchetto. Ma se dovessi controllare, dovresti controllare subito dopo l'acquisizione(), non dopo che il programma è stato avviato e stai per uscire. – Will