В Android, если вы хотите очистить текущий стек Activity
и запустите новый Activity
(например, выйдите из приложения и запустив журнал в Activity
), похоже, есть два подхода.Activity.finishAffinity() vs Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK
Есть ли какие-либо преимущества для одного над другим, если ваш целевой уровень API выше 16?
1) Отделка Affinity
Вызов finishAffinity()
от деятельности. Activity.finishAffinity
2) Намерение Флаги
Intent intent = new Intent(this, LoginActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
startActivity(intent);
finish();
finishAffinity()
подход пригоден для> = API 16.
The Intent
флагов подход пригоден для> = API 11.
Чтобы быть ясными, с целью очистки текущего стека Activity
оба подхода выглядят одинаково одинаково. Мой вопрос в том, есть ли проблемы с тем, что люди испытали, и, следовательно, есть ли какие-либо причины выбирать один над другим?
Задержка или мерцание, о котором вы упоминаете, изначально сделало меня вопросом finishAffinity(). IIRC, некоторые устройства Samsung, в частности, имели очень выраженное мерцание при использовании функции finishAffinity(), но у меня больше нет устройств для тестирования. –
В этом случае это была версия намерения, которая имела мерцание в соответствии с видео. – brindy
На самом деле, я не уверен, что назову это мерцанием (на основе видео). Однако, что-то определенно отличается от того, что происходит визуально. finishAffinity выглядит как сверху, версия намерения выглядит так, как будто она «закончила», открывая другую в верхней части стека. – brindy