Заменить текущую активность

Мне нужно заменить текущую деятельность на новую. То есть я хочу начать новое действие и удалить текущее действие из стека задач.

Исходя из документации, кажется, что наилучшим способом было бы запустить действие с использованием Activity.startActivity, как обычно, а затем немедленно вызвать Activity.finish, чтобы закрыть текущее действие.

Это допустимое использование этих API или я должен делать что-то еще?

5 ответов

Решение

Да. Хорошо использовать API таким образом.

Надлежащим способом достижения этого является использование следующего:

Intent intent = new Intent(this,MyActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_TASK_ON_HOME);
startActivity(intent);
this.finish();

Код предполагает, что вы находитесь в действии, в противном случае, если вы используете фрагменты, используйте getActivity()

Таким образом, действие начинается, вы правильно устанавливаете иерархию для кнопки "Назад" и также уничтожаете соответствующее действие.

Попробуйте использовать FLAG_ACTIVITY_TASK_ON_HOME, FLAG_ACTIVITY_NEW_TASK в намерениях флаги

Вы можете добавить android:launchMode="singleInstance" в свою деятельность, а затем переопределить метод onNewIntent, чтобы обновить дату

Ссылка PlayerActivity в демоверсии ExoPlayer

Вы можете использовать FLAG_ACTIVITY_CLEAR_TASK при запуске действия. Я также определил launchMode для моей активности в манифесте как singleTask, но это было потому, что я хотел такое поведение для новой активности. Я думаю, что вы можете получить то, что вы хотите в отношении очистки предыдущего действия, независимо от того, что вы используете для launchMode с новым действием, если вы передаете startActivity флаг FLAG_ACTIVITY_CLEAR_TASK.

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