Android: Как высвободить средства, когда приложение завершается?

Одна очень полезная функция - возможность частично построить проект реактора Maven, чтобы в него входили только те детали, которые вам нужны.

Чтобы сделать это немного понятнее, рассмотрим случай, когда коллекция файлов WAR со множеством общих ресурсов (например, JavaScript, файлы конфигурации Spring и т. Д.) Распределяется между ними с использованием метода наложения . Если вы работаете над какой-либо веб-страницей (запущенной в Jetty) и хотите изменить часть оверлейного кода, который хранится в отдельном модуле, то обычно вы ожидаете, что вам придется остановить Jetty, запустить сборку Maven, запустить Jetty снова и Продолжить. Так обстоит дело с Eclipse и практически со всеми другими IDE, с которыми я работал. Не так в IntelliJ. Используя настройки проекта, вы можете определить, какой аспект какого модуля вы хотите включить в фоновую сборку. Следовательно, вы получите процесс, который выглядит безупречно. Вы вносите изменения практически в любой код проекта, и он сразу становится доступным после обновления браузера.

Очень аккуратный и очень быстрый.

Я не мог представить, чтобы кодирование внешнего интерфейса в чем-то вроде YUI поддерживало DWR / SpringMVC без него.

13
задан Niko Gamulin 1 July 2009 в 09:12
поделиться

5 ответов

Я бы переместил блокировку с OnCreate () на OnResume () . Вам нужна блокировка в течение видимого времени существования Activity, а не всего времени существования Activity. Вы, конечно, можете по-прежнему выполнять Activity, а перед ним - другое Activity.

Я бы переместил выпуск в OnPause () . OnPause () - это самая ранняя точка, в которой ваше приложение обычно должно быть убито ОС.

Кроме того, я бы не стал проверять, есть ли у меня блокировка перед освобождением. Если вы используете OnResume () для получения блокировки; isHeld всегда должно быть истинным в OnPause () .

13
ответ дан 1 December 2019 в 22:40
поделиться

Куда вы вызываете finish ()?

Вы должны освобождать свои ресурсы в onPause, а не в onStop. Нет гарантии, что onStop всегда будет вызываться до того, как ваша активность будет убита. Если системе требуются ресурсы, она может прервать действие до вызова onStop.

Попытайтесь поместить журналы отладки и отследить путь выполнения, если вы считаете, что ваше приложение завершается.

0
ответ дан 1 December 2019 в 22:40
поделиться

Похоже, ваше приложение никогда не вызывает release на Wakelock - возможно ли, что оно генерирует исключение ранее в onStop или onPause ? Я бы включил некоторые записи в журнал, когда вы вызываете релиз, чтобы подтвердить его выполнение.

В любом случае, вы ' Я определенно захочу переместить методы приобретения и выпуска в onResume и onPause соответственно. Код, который у вас есть, получит WakeLock только при первом запуске вашего приложения.

Благодаря фоновой обработке Android в вашем коде есть потенциальный дисбаланс. Если пользователь нажимает клавишу «Домой» для переключения приложений, блокировка снимается. Если они вернутся к вашему приложению, onCreate не будет вызываться, поэтому блокировка никогда не будет получена.

Лучше всего создать WakeLock в onCreate (как у вас), получить блокировку в onResume и освободить ее в onPause (включая вызов isHeld). Это гарантирует, что блокировка будет удерживаться всякий раз, когда ваше приложение находится на переднем плане.

ve got получит WakeLock только при первом запуске вашего приложения.

Благодаря фоновой обработке Android в вашем коде есть потенциальный дисбаланс. Если пользователь нажимает клавишу «Домой» для переключения приложений, блокировка снимается. Если они вернутся к вашему приложению, onCreate не будет вызываться, поэтому блокировка никогда не будет получена.

Лучше всего создать WakeLock в onCreate (как у вас), получить блокировку в onResume и освободить ее в onPause (включая вызов isHeld). Это гарантирует, что блокировка будет удерживаться всякий раз, когда ваше приложение находится на переднем плане.

ve got получит WakeLock только при первом запуске вашего приложения.

Благодаря фоновой обработке Android в вашем коде есть потенциальный дисбаланс. Если пользователь нажимает клавишу «Домой» для переключения приложений, блокировка снимается. Если они вернутся к вашему приложению, onCreate не будет вызываться, поэтому блокировка никогда не будет получена.

Лучше всего создать WakeLock в onCreate (как у вас), получить блокировку в onResume и освободить ее в onPause (включая вызов isHeld). Это гарантирует, что блокировка будет удерживаться всякий раз, когда ваше приложение находится на переднем плане.

Если они вернутся к вашему приложению, onCreate не будет вызываться, поэтому блокировка никогда не будет получена.

Лучше всего создать WakeLock в onCreate (как у вас), получить блокировку в onResume и освободить ее в onPause (включая вызов isHeld). Это гарантирует, что блокировка будет удерживаться всякий раз, когда ваше приложение находится на переднем плане.

Если они вернутся к вашему приложению, onCreate не будет вызываться, поэтому блокировка никогда не будет получена.

Лучше всего создать WakeLock в onCreate (как у вас), получить блокировку в onResume и освободить ее в onPause (включая вызов isHeld). Это гарантирует, что блокировка будет удерживаться всякий раз, когда ваше приложение находится на переднем плане.

3
ответ дан 1 December 2019 в 22:40
поделиться

Я использую mWakelock.setReferenceCounted (false), до сих пор не знаю, что это значит, но он решает мою проблему «Wakelock недостаточно заблокирован».

Инициализация: OnStart () получить: onResume () выпуск: onStop ()

3
ответ дан 1 December 2019 в 22:40
поделиться

У меня были проблемы с выпуском данных, когда я использовал OpenGL. Итак, теперь с android.os.Process.killProcess (android.os.Process.myPid ()); работает так, как я хочу !!

Спасибо Art

2
ответ дан 1 December 2019 в 22:40
поделиться
Другие вопросы по тегам:

Похожие вопросы: