Активность Android: где инициализировать параметры?

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

ArrayList<Integer> numbers = new ArrayList<>();
protected void onCreate(Bundle savedInstanceState) {
    numbers.add(1);
    numbers.add(2);
    numbers.add(3);
}

Процесс инициализации происходит каждый раз, когда происходят некоторые изменения конфигурации, такие как поворот экрана и т. д., так как они вызывают OnCreate опять и опять.

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

2 ответа

Решение

Процесс инициализации происходит каждый раз, когда происходят некоторые изменения конфигурации, такие как поворот экрана и т. д., поскольку они будут снова и снова вызывать OnCreate.

Это потому, что это новый экземпляр активности. По умолчанию любые поля будут null если вы не инициализируете их.

Вы можете использовать сохраненное состояние экземпляра Bundleсохраненные фрагменты или другие методы хранения этих данных.

Вот что я думаю, вы могли бы сделать:

//create a method to run once;

private void initParameters(){

   //do your thing here
}

Затем создайте метод для установки тега в настройках

private void updatePreferences(){
  //now set a tag that indicates that params have been initialized

  ....
}

Теперь внутри onCreate или же onResume,

//check prefernces
if(!initialized){
   //init here your params!
}

Я надеюсь, что это дает вам идею!

Другие вопросы по тегам