【Android】FLAG_ACTIVITY_CLEAR_TOP について

2021/03/10に公開

FLAG_ACTIVITY_CLEAR_TOPインテントフラグの1つ です。

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

task_image

FLAG_ACTIVITY_CLEAR_TOP の動き

Activity AActivity BActivity CActivity Dがあるとします。

Activityが「A -> B -> C -> D」とスタックされていて、Activity DからActivity Bに遷移する際、IntentFLAG_ACTIVITY_CLEAR_TOPを指定すると、Activity Bの上に積まれているActivity CActivity 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