Я создал приложение, которое использует камеру и во время выполнения приложения экран всегда включен.Android: Как освободить ресурсы, когда приложение завершается?
В методе OnCreate() Я добавил замок:
final PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE);
this.mWakeLock = pm.newWakeLock(PowerManager.SCREEN_DIM_WAKE_LOCK, "My Tag");
this.mWakeLock.acquire();
И это переопределенный метод OnStop():
@Override
protected void onStop() {
if(mWakeLock.isHeld())
{
mWakeLock.release();
}
super.onStop();
}
Но после окончания приложения экрана остается на все и если я запускаю приложение камеры, он обнаруживает ошибку, которая, очевидно, появляется, потому что ресурсы камеры не освобождаются.
Кто-нибудь знает, как освободить все ресурсы при завершении приложения?
Ваше предложение для не проверки состояния блокировки нормально, если расцепитель() является операцией идемпотентная. Если нет, это плохо. Что делать, если приложение не удалось получить блокировку и хочет закрыть приложение? – Thushan
Отличный комментарий. Я посмотрел исходный код Android. Похоже, что единственный способ, которым вы не можете получить блокировку, - это нарушение вашего вызова, и в этом случае он регистрирует ошибку, но не делает исключение. Если вы вызываете release(), не приобретая блокировки, он будет генерировать исключение «Wake-Lock under-locked». Документация по покупке() ведет к мысли, если вы попросите замок, вы получите замок. Но если вы должны проверить, то вы должны проверить сразу после получения(), а не после того, как программа была запущена, и вы собираетесь выйти. – Will