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

Я пишу простое приложение для 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).