Intereting Posts
Каков наилучший способ подождать установки GPS-местоположения? RecognizerIntent не работает; "Отсутствует дополнительный вызов_пакет" Я не могу получить реальный путь к съемной SD-карте. Есть ли способ получить? Кнопка Android back не работает во время воспроизведения видео в VideoView Импортируйте существующий проект NDK для Android в VS2015 RC и RTM Android. Фрагмент getActivity () иногда возвращает null Прокрутка / масштабирование сцены в OpenGL и подразделении Исходная геолокация реагирует нативный ContentProvider с несколькими таблицами Как получить список строк из Firebase, чтобы заполнить Spinner Как удалить общие предпочтения при удалении приложения в android AddToBackStack () не работает. Вернуться на главную не предыдущий фрагмент Как использовать запрос для множественного аргумента выбора, используя один столбец выбора HttpUrlConnection.openConnection завершается второй раз Как получить элементы (findViewById) для макета, который динамически загружается (setView) в диалоговом окне?

Сохраняет ли андроид статические переменные?

Я пишу простое приложение для Android, которое в основном является модификацией демонстрации фрагментов, доступной в документации по Android. В приложении есть файл Ipsum.java, который имеет статический ArrayList строк, называемый Headlines.

В методе onCreate () основной активности у меня есть следующий код, который добавляет некоторые элементы в список массивов.

if (savedInstanceState == null){ Ipsum.Headlines.add("String 1 "); Ipsum.Headlines.add("String 2"); } 

SavedInstanceState – это набор, который система передает методу, если приложение возобновляется из некоторого неактивного состояния. Логика заключается в том, что если savedInstanceState имеет значение NULL, приложение не возобновляется, а запускается как новый экземпляр.

Если я покину приложение, используя кнопку «Главная» и снова запустив приложение, массивList содержит только два элемента: «String 1» и «String 2». (Это желаемое поведение)

Однако, если я покину приложение с помощью кнопки «Назад», а затем снова запустим приложение, элементы «String 1» и «String 2» будут добавлены снова . Затем массив имеет 4 элемента.

 String 1 String 2 String 1 String 2 

(Содержимое arrayList можно увидеть, потому что они используются для заполнения списка ListView) Кажется, что приложение хранит содержимое списка статических массивов при нажатии кнопки «Назад» .. и что Bundle не передается в onCreate () При перезапуске приложения. Может кто-нибудь объяснить, что здесь происходит, с точки зрения жизненного цикла приложения?

Май Это поможет вам:

Давайте начнем с немного фона: что происходит, когда вы запускаете приложение?

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

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

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

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

Для получения дополнительной информации: прочитайте ответ Самуха в этой ссылке … Нажмите здесь

Ваша деятельность возобновляется . Если вы хотите контролировать, что происходит, реализуйте onResume() .

Подробнее см. « Управление жизненным циклом действий» .

РЕДАКТИРОВАТЬ:

Статические переменные – это концепция Java. static означает, что имеется только одна копия переменной для всего класса. Альтернативой является то, что каждый объект будет иметь свою собственную копию.

Поэтому, пока ваш код работает, у вас есть только одна копия переменной в вашей программе . Он не сохраняется нигде, если вы не добавите код для этого.

Статические переменные связаны с классом, и они будут жить до тех пор, пока класс находится в памяти, и уничтожают, когда класс разгружается (что очень редко происходит). Это может произойти, когда –

  -You force stop your app. -Application crashes. -You clear your app data. -Switch off your Device(Shutdown DVM).