3. @Immutable と @Stable の使い分け - Ki-Kobayashi/Android-Wiki GitHub Wiki

https://medium.com/@KaushalVasava/stable-and-immutable-in-jetpack-compose-10e34295bc1c

🟩 @Immutable

  • 利用するクラスが、絶対不変である場合に利用(すべてのpropがval)
  • compose compiler が変更はないということを理解して recompose がスキップされる

🟩 @Stable

  • 内部にState等を保持していて絶対不変とは言えない場合に利用(var)

  • 値の更新をcomposeに通知しながら、recomposeを減らしてUIの更新を行う

    ※Interfaceも安定していないとみなされる

🟩 そもそも「安定している」とは?

  • その型が不変である場合
  • 再コンポーズの間にその値が変更されたかどうかを Compose が認識できる場合

🟡以下の型は、@Stableがなくても安定しているとみなされる(val)

コンポーザブルにパラメータとして渡される ”すべて”の型 が安定している場合、UI ツリー内のコンポーザブルの位置に基づいてパラメータ値が等しいかどうかが比較されます。前回の呼び出し以降、すべての値が変化していなければ、再コンポジションはスキップされます。
https://developer.android.com/jetpack/compose/lifecycle?hl=ja#skipping