2017-02-14 2 views
1

Я пытаюсь разработать приложение для Android. Я использовал this учебник. MainActivity код, как показано нижеonCreate() workflow confusion

@Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     ActionBar actionBar = getSupportActionBar(); 
     actionBar.setDisplayHomeAsUpEnabled(true); 
     actionBar.setHomeButtonEnabled(true); 

     if (savedInstanceState == null) { 

      // withholding the previously created fragment from being created again 
      // On orientation change, it will prevent fragment recreation 
      // its necessary to reserve the fragment stack inside each tab 
      initScreen(); 

     } else { 
      // restoring the previously created fragment 
      // and getting the reference 
      carouselFragment = (CarouselFragment) getSupportFragmentManager().getFragments().get(0); 
     } 
    } 

Как я понимаю, линия, которая проверяет savedInstanceState равна нулю или нет, мы пытаемся сохранить текущий экран пользователя. Я думаю, он охватывает возможность нажатия кнопки «домой» и повторного открытия приложения и поворота экрана. Но в текущей ситуации onCreate не вызывается, когда приложение снова открыто. Но я прошел рабочий процесс android в следующем link, он не принимает вызов onCreate() еще раз. Но мы используем saveInstanceState в качестве параметра, который используется для проверки того, что он имеет предыдущее состояние или нет, как понять. Подводя итог, я запутался в использовании savedInstanceState. Если он используется для проверки предыдущего состояния, то почему onCreate не вызывается?

EDITED: Как поясняют комментарии, повторное открытие приложения не вызывает отдыха. Как я знаю, onStart() вызывается. Как я могу проверить savedState в onStart, чтобы воссоздать представления или сохранить предыдущий фрагмент?

+1

onRestoreInstanceState - это волшебная функция, которая решает вас смутить – FlanschiFox

+1

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

+4

onCreate вызывается, когда активность только что создана. Когда приложение снова открывается, оно перезапускается, а не воссоздается, что означает, что ваша деятельность все еще существует. Когда вы поворачиваете свой телефон, действие уничтожается и воссоздается в новой конфигурации, поэтому onCreate называется –

ответ

0

различные состояния с соответствующими обратными вызовами являются:

onCreate ->created Активность создан, но еще не работает или не видно больше.

onStart ->started Активность запущена, но еще не запущена или не в фокусе.

onResume ->resumed Активность работает.

->paused Активность приостановлена, поскольку она потеряла фокус/не является основной задачей.

onStop ->stopped Активность прекращена, так как она больше не виден.

onDestroy ->destroyed Активность разрушена, так как она закончена, например. потому что было изменение ориентации, или оно разрушается системой для памяти.

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

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

Для получения подробных сведений об этом см. Разработчики Android documentation о жизненном цикле деятельности.

Как правило, вам не нужно savedInstanceState, когда ваша деятельность просто остановлена, потому что ваша деятельность сохранит свое состояние. Если вы хотите использовать savedInstanceState при остановке, используйте onRestoreInstanceState(Bundle). Он вызывается после onStart().

Более подробную информацию можно найти here.

0

onCreate() вызывается при изменении ориентации в приложении openend. В savedInstanceState он может найти информацию о состоянии, которое было у Activity перед изменением ориентации. Я не имею никакого отношения к повторному открытию приложения.

0

Правильно, при работе с методами внутри приложения, убедитесь, что вы понимаете, что делает каждая строка ... Например:

super.onCreate(savedInstanceState); 

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