はじめに
無限に忘れてしまうので、戒めの記事を書きます。
公式ドキュメントのこの部分についてです。
本題
FragmentやカスタムViewでComposeViewを使用する場合は、それらのライフサイクルに合わせてCompositionを破棄する必要があります。
それを実現してくれるのが、ViewCompositionStrategyになります。
公式のサンプル
setViewCompositionStrategy(ViewCompositionStrategy.DisposeOnViewTreeLifecycleDestroyed)
setContent {
MaterialTheme {
// In Compose world
Text("Hello Compose!")
}
}
デフォルトではDisposeOnDetachedFromWindowOrReleasedFromPoolが使用されているので、DisposeOnViewTreeLifecycleDestroyed、またはDisposeOnLifecycleDestroyedを使ってあげるようにしましょう。
まとめ
- FragmentやカスタムViewの上にComposeViewを乗っける場合は、ViewCompositionStrategyを指定しよう。
おわり。
おまけ
DisposeOnViewTreeLifecycleDestroyedは一番近いlifecycleOwnerを、DisposeOnLifecycleDestroyedは渡したlifecycleOwnerを使う。
明示的にlifecycleOwnerを指定したい場合はDisposeOnLifecycleDestroyedを、そうじゃない場合はDisposeOnViewTreeLifecycleDestroyedを使うとよさそう。