본 글은 학습을 위해 ViewCompositionStrategy Demystified를 읽고 입맛대로 정리하였습니다.
setViewCompositionStrategy
를 통해 다른 strategy를 적용할 수 있음val composeView = ComposeView(context = context)
composeView.setViewCompositionStrategy(
ViewCompositionStrategy.DisposeOnViewTreeLifecycleDestroyed
)
ViewGroup.removeView*
를 통해 View가 제거됐을 때 class MyFragment : Fragment() {
// …
override fun onCreateView(
inflater: LayoutInflater,
container: ViewGroup?,
savedInstanceState: Bundle?
) = ComposeView(requireContext()).apply {
setViewCompositionStrategy(
ViewCompositionStrategy.DisposeOnLifecycleDestroyed(
lifecycle = this@MyFragment.lifecycle // <== Lifecycle 지정
)
)
// …
}
}
View가 attach된 다음 window의 ViewTreeLifecycleOwner가 destroy될 때 dispose됨
Fragment View와 같이 ViewTreeLifecycleOwner와 일대일 관계일 때 적합
class MyCustomView @JvmOverloads constructor(
context: Context,
attrs: AttributeSet? = null,
defStyle: Int = 0
) : AbstractComposeView(context, attrs, defStyle) {
init { // <== 이 시점에는 관련 lifecycle을 알지 못함
setViewCompositionStrategy(
ViewCompositionStrategy.DisposeOnViewTreeLifecycleDestroyed
)
}
@Composable
override fun Content() {
// Compose
}
}
좋은 글 감사합니다~