2016-07-31 2 views
0

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

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

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

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

+0

Почему бы не использовать метод, который работает только один раз? Хранить тег в ваших предпочтениях? – Eenvincible

ответ

2

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

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

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

0

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

//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! 
} 

Надеюсь, это даст вам представление!