In Activity Lifecycle из руководства разработчика Android.
Координация деятельности
Когда одно действие начинает другое, они оба переживают жизненный цикл
переходы. Первое действие перестает работать и входит в Приостановлено
или Остановленное состояние, пока создается другое действие. Если эти
мероприятия обмениваются данными, сохраненными на диске или в другом месте, важно
понять, что первая деятельность не полностью остановлена до
второй создан. Скорее, процесс запуска второго
один пересекается с процессом остановки первого.
Порядок обратных вызовов жизненного цикла четко определен, особенно когда
эти два действия находятся в одном процессе (приложение), и одно начинается
другой. Вот порядок операций, которые происходят, когда действие A
начинает деятельность B:
- Выполнение метода A *
onPause()
.
- Действия B
onCreate()
, onStart()
и onResume()
выполняются последовательно. (Занятие B теперь имеет фокус на пользователя.)
- Затем, если действие A больше не отображается на экране, выполняется его метод
onStop()
.
Эта предсказуемая последовательность обратных вызовов жизненного цикла позволяет вам управлять
переход информации из одного вида деятельности в другой.
Так что поведение, которое вы описываете, является ожидаемым или предсказуемым.
Вернуться к вашим вопросам.
1.Как полностью уничтожить PreviousActivity при перезапуске активности?
- Использование воссоздание API, ограничение - работает только с API 11 или выше
2. Есть ли способ поставить Extras во время использования refreshate ()?
воссоздавать
public void recreate ()
Заставить эту активность воссоздать новый экземпляр. Это результаты
по существу в том же потоке, что и при создании деятельности из-за
изменение конфигурации - текущий экземпляр пройдет через
жизненный цикл для onDestroy () и новый экземпляр, созданный после него.
Поскольку действие будет воссоздано, будут также вызваны onSaveInstanceState и onRestoreInstanceState . Как вы можете догадаться, идея заключается в том, чтобы сохранить данные в onSaveInstanceState
и извлечь в onRestoreInstanceState
или onCreate
.
Шаг 1: Сохранить данные в onSaveInstanceState
// The key for saving and retrieving isActivityRecreated field.
private static final String KEY_IS_ACTIVITY_RECREATED = "KEY_IS_ACTIVITY_RECREATED";
/** true if this activity is recreated. */
private boolean isActivityRecreated = false;
// Call this method when you want to recreate this activity.
private void recreateActivity() {
isActivityRecreated = true;
recreate();
}
@Override
protected void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
outState.putBoolean(KEY_IS_ACTIVITY_RECREATED, isActivityRecreated);
outState.putInt(Constants.VIDEO_ID, videoId);
outState.putInt(Constants.CATEGORY_ID, categoryId);
}
Шаг 2: Получить данные в onRestoreInstanceState
или onCreate
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
if (savedInstanceState != null) {
isActivityRecreated = savedInstanceState.getBoolean(KEY_IS_ACTIVITY_RECREATED);
if (isActivityRecreated) {
// This activity has been recreated.
// Reset the flag
isActivityRecreated = false;
// Write your code when this activity recreated.
int videoId = savedInstanceState.getInt(Constants.VIDEO_ID);
int categoryId = savedInstanceState.getInt(Constants.CATEGORY_ID);
...
}
}
}