Ich habe eine Anwendung erstellt, die Kamera verwendet und während der Appplication-Ausführung ist der Bildschirm immer eingeschaltet.Android: Wie Ressourcen freigegeben werden, wenn die Anwendung beendet wird?
Im onCreate() -Methode hinzugefügt ich das Schloss:
final PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE);
this.mWakeLock = pm.newWakeLock(PowerManager.SCREEN_DIM_WAKE_LOCK, "My Tag");
this.mWakeLock.acquire();
Und das ist die überschriebenen OnStop() -Methode:
@Override
protected void onStop() {
if(mWakeLock.isHeld())
{
mWakeLock.release();
}
super.onStop();
}
Aber nach der Beendigung der Anwendung bleibt der Bildschirm auf die ganze Zeit und wenn ich die Kameraanwendung starte, stößt sie auf einen Fehler, der offensichtlich erscheint, weil die Kameraressourcen nicht freigegeben sind.
Kann jemand alle Ressourcen auf Anwendungsterminierung freigeben?
Ihr Vorschlag für nicht für Verriegelungszustand Überprüfung ist in Ordnung, wenn Release() ist ein idempotent Betrieb. Wenn nicht, ist es schlecht. Was, wenn die App die Sperre nicht erhalten konnte und die App schließen möchte? – Thushan
Großer Kommentar. Ich schaute auf den Android-Quellcode. Es sieht so aus, als ob die einzige Möglichkeit, eine Sperre zu erhalten, darin besteht, wenn Sie Ihren Anruf falsch formulieren. In diesem Fall wird ein Fehler protokolliert, es wird jedoch keine Ausnahme ausgelöst. Wenn Sie release() aufrufen, ohne eine Sperre zu erhalten, wird eine Ausnahme "WakeLock underlocked" ausgelöst. Die Dokumentation von acquire() führt dazu, dass man denkt, wenn man nach dem Schloss fragt, bekommt man das Schloss. Aber wenn Sie das überprüfen sollten, dann sollten Sie direkt nach dem acquire() überprüfen, nicht nachdem das Programm ausgeführt wurde und Sie den Vorgang gerade beenden. – Will