⛳
【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