Какой метод деятельности вызывается при изменении ориентации? - PullRequest
30 голосов
/ 11 июня 2011

Какой метод жизненного цикла вызывается при изменении ориентации?Мое приложение выполняет метод onResume() или, возможно, перезагружает все действие, потому что я установил одно логическое значение, чтобы проверить, выполняется ли оно впервые или нет.Я прочитал onConfigurationChanged() начинается, когда происходит изменение ориентации, это правда?Как справиться с этим?

Ответы [ 2 ]

35 голосов
/ 11 июня 2011

Интересный ...

Активность начинается onResume() - это то, что вы объявляете в своем XML по умолчанию.

И, как я обнаружил из вопроса, ответ на переполнение стека:

Изменение ориентации

  • onSaveInstanceState
  • onPause
  • onStop
  • onCreate
  • onStart
  • onRestoreInstanceState
  • onResume

Переключиться на действие 2

  • onSaveInstanceState
  • onPause

Изменение ориентации WHILEIN Activity 2

  • onStop
  • onCreate
  • onStart

Переключение НАЗАД ИЗ Activity2

  • onResume

Я предполагаю, что поскольку действие 1 скрыто во время поворота, onRestoreInstanceState не вызывается, потому что нет «вида» (т. Е. Его нельзя увидеть / просмотреть).Кроме того, вполне возможно иметь 2 совершенно разных файла макета для портрета / пейзажа, которые потенциально могут иметь разные элементы пользовательского интерфейса с разными идентификаторами.

В результате я бы сказал, если вы хотите использовать Bundle в onSaveInstanceState, чтобы сохранить свои собственные данные, затем вам нужно добавить дополнительную логику в onCreate (в Деятельности 1) для обработки ваших собственных данных там (а также сделать это условно в onRestoreInstanceState).

В частности, вы можете сохранить «последнее известное» поле ориентации, чтобы onCreate знал, что ему нужно обрабатывать ваши собственные данные, поскольку ориентация изменилась, а не полагаться на то, что onRestoreInstanceState вызывается.

0 голосов
/ 06 августа 2018
public class MainActivity extends AppCompatActivity {
private final static String TAG = "AppActivity";

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    Log.d(TAG, "onCreate(Bundle) called");
    setContentView(R.layout.activity_main);
}

@Override
public void onStart() {
    super.onStart();
    Log.d(TAG, "onStart() called");
}

@Override
public void onPause() {
    super.onPause();
    Log.d(TAG, "onPause() called");
}

@Override
public void onResume() {
    super.onResume();
    Log.d(TAG, "onResume() called");
}

@Override
public void onStop() {
    super.onStop();
    Log.d(TAG, "onStop() called");
}

@Override
public void onDestroy() {
    super.onDestroy();
    Log.d(TAG, "onDestroy() called");
}

}

1) Попробуйте запустить приложение на телефоне и / или эмуляторе и откройте Logcat => в верхней части окна, выберите Verbose.

2) Теперьпопробуйте изменить ориентацию экрана (например, из портрета => альбомный режим).

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

...