Жизненный цикл статического объекта Android

Я создаю поисковое приложение события, мы устанавливаем критерии поиска с одного экрана, заполняют на другом экране затем, пользователь может отредактировать критерии поиска с 3-го экрана и переходит к 4-му экрану.

Для достижения выше задачи, я использую статический объект, которые помнят значения вокруг приложения, и я не должен делать никакой дополнительной вещи.

Но я боюсь, если о жизненном цикле статического объекта в андроиде, если низкая память, найденная андроидом, удаляет статические объекты???

Поскольку андроид поддерживает много управление задачами, если пользователь переключается на другое приложение и когда пользователь возвращается, приложение начинает действовать сумасшедшее, статический объект становится удаленным когда это много задача??? какая-либо идея?? и также предложите держать статический объект с помощью одноэлементного метода, лучший подход???

96
задан Marian Paździoch 6 October 2015 в 11:52
поделиться

2 ответа

Давайте начнем с небольшого фона: Что происходит, когда вы запускаете приложение?
ОС запускает процесс, присваивает ему уникальный идентификатор процесса и выделяет таблицу процессов. Процесс запускает экземпляр DVM (Dalvik VM); Каждое приложение запускается внутри DVM.
. DVM управляет разгрузкой класса загрузки, жизненным циклом экземпляра, GC и т.д.

Время жизни статической переменной: Статическая переменная появляется, когда класс загружается JVM и умирает, когда класс выгружается.

Таким образом, если вы создадите андроид-приложение и инициализируете статическую переменную, она останется в JVM до тех пор, пока не произойдет одно из следующих событий:
. 1. класс выгружен
. 2. JVM отключается
3. процесс умирает

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

Вы можете проверить это несколькими строками кода:

  1. распечатать неинициализированную статическую переменную в onCreate вашей активности -> должна распечатать нулевую
  2. инициализирующую статическую переменную. распечатать ее -> значение было бы ненулевым
  3. Нажмите кнопку возврата и перейдите к начальному экрану. Примечание: Главный экран - это еще одна активность.
  4. Запустите свою активность снова -> статическая переменная будет ненулевой
  5. Убейте процесс вашего приложения из DDMS(кнопка остановки в окне устройств).
  6. Перезапустите свою активность -> статическая часть будет иметь нулевое значение.

Надеюсь, это поможет.

233
ответ дан 24 November 2019 в 05:33
поделиться

Ну, одноэлементный шаблон также основан на использовании статических переменных, так что на самом деле вы бы находились в одном и том же положении. Хотя статический подход может работать в большинстве случаев, может случиться так, что в некоторых случаях, когда память заполнена и другая активность выходит на первый план, прежде чем ваше приложение перейдет к следующему экрану, процесс вашей активности может быть убит, и вы потеряете статические значения. Однако Android предлагает несколько вариантов сохранения значений между состояниями или их передачи, например:

  • используя Intent, вы можете пройти мимо ваши критерии поиска от активности до деятельность (подобно веб-сервису http запрос)
  • используя предпочтения приложения, вы может сохранить значения и извлечь их в деятельности, которая нуждается в них
  • с помощью базы данных sqlite вы можете хранить их за столом и извлекать их позже
  • если тебе нужно просто сохранить активность. чтобы при перезагрузке поля наполняться их прежним выбранные значения, можно реализовать активность onSaveInstanceState() метод - обратите внимание, что это не рекомендуемый период между мероприятиями Преследование состояний.

Примеры использования предпочтений, намерений и базы данных sqlite можно получить, посмотрев на дерево исходных кодов aegis-shield в Google-коде или в других открытых Android-приложениях.

.
16
ответ дан 24 November 2019 в 05:33
поделиться
Другие вопросы по тегам:

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