Activity.finishAffinity() vs Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK

В Android, если вы хотите очистить текущий стек Activity и запустить новый Activity (например, выйти из приложения и запустить журнал Activity), похоже, есть два подхода.

Есть ли какие-либо преимущества для одного над другим, если ваш целевой уровень API выше 16?

1) Финитировать сродство

Вызов finishAffinity() из Activity. 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.

Подход флагов Intent подходит для >= API 11.

Чтобы быть ясным, для очистки текущего стека Activity оба подхода выглядят одинаково одинаково. Мой вопрос в том, есть ли проблемы с тем, что люди испытали и, следовательно, есть ли какие-либо причины выбрать один над другим?

Ответ 1

Функционально, нет никакой разницы, но, проверяя это на GenyMotion, кажется, есть небольшая визуальная разница. См. Веб-трансляцию: https://drive.google.com/file/d/0B8Y77sY7Y2CGRS02c3UyNjd2MGs/view?usp=sharing

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

Субъективно, я бы сказал, пойти с finishAffinity(), потому что он более явный. Однако, если вы должны поддерживать < SDK 16 у вас действительно нет выбора.

Ответ 2

Для этого вы должны использовать флаги намерения.

Что делать, если у вас есть большой стек действий, вы будете звонить из каждого, чтобы закончить их все?

Его гораздо лучше и проще просто называть намерение.

Надеюсь, что это поможет.

Ответ 3

Попробуйте это Intent.FLAG_ACTIVITY_CLEAR_TOP он очищает стек предыдущих действий.