⛳
【Android】FLAG_ACTIVITY_CLEAR_TOP について
FLAG_ACTIVITY_CLEAR_TOPは インテントフラグの1つ です。
インテントフラグとはIntentに設定するフラグのことで、Activityとタスク(Activityのスタック)のデフォルトの関連付けを変更することが出来ます。

FLAG_ACTIVITY_CLEAR_TOP の動き
Activity A・Activity B・Activity C・Activity Dがあるとします。
Activityが「A -> B -> C -> D」とスタックされていて、Activity DからActivity Bに遷移する際、IntentにFLAG_ACTIVITY_CLEAR_TOPを指定すると、Activity Bの上に積まれているActivity CとActivity Dがスタックから削除されて、「A -> B」という状態になります。
FLAG_ACTIVITY_SINGLE_TOPを併用するとActivityが再作成されずに、onNewIntentを呼び出してActivityを再利用するようになります。
Activity D
// ActivityC/D を削除して、ActivityB へ遷移する
// Activity Bは再作成される
fun navigateActivityB() {
val intent = Intent(this, ActivityB::class.java).also {
it.flags = Intent.FLAG_ACTIVITY_CLEAR_TOP
}
startActivity(intent)
}
// ActivityB の onNewIntent を呼び出して、Activity を再利用する
fun navigateActivityB() {
val intent = Intent(this, ActivityB::class.java).also {
it.flags = Intent.FLAG_ACTIVITY_CLEAR_TOP or Intent.FLAG_ACTIVITY_SINGLE_TOP
}
startActivity(intent)
}
Intent.FLAG_ACTIVITY_CLEAR_TOPの使いどころとしては、画面遷移した後に戻るボタンなどで遷移元に戻って欲しくないときになるのかなと思います。
Discussion