[Android] viewLifeCycleOwner
LiveData
にオブザーバーを設定するか、Flow
にlifecycleScopeを必要とする場合、viewLifeCycleOwner
は通常あまりよく見えません.viewLifecycleOwner.lifecycleScope.launch {
viewModel.searchQuery.collectLatest { query ->
binding.toolbar.title = query
}
}
上のコードからviewLifecycleOwnerを削除して実行します.もちろん正常に実行できます.でもどうして使うの?1.ライフサイクル
この文章を読んだすべての人は、計画のライフサイクルがonAttachから始まり、onDestoyで終わることを知っています.
ただし、ここに
viewLifecycleOwner
を書き込む場合は、onCreateViewからonDestroyViewまでのライフサイクルのみを書き込むことができます.これはviewLifecycleOwnerのライフサイクルが短いことを意味します.
したがって、onCreateViewの前とonDestroyViewの後に
viewLifecycleOwner
が呼び出されると、IllegalStateException
が表示されます.@MainThread
@NonNull
public LifecycleOwner getViewLifecycleOwner() {
if (mViewLifecycleOwner == null) {
throw new IllegalStateException("Can't access the Fragment View's LifecycleOwner when "
+ "getView() is null i.e., before onCreateView() or after onDestroyView()");
}
return mViewLifecycleOwner;
}
2.では、いつ使いますか。
アクティビティとは異なり、
onDestroy
が呼び出される前に、onCreateView
が複数回呼び出される場合があります.LiveData
の観察のために傍観者を設定する必要がある場合、lifecycleOwnerを使用してlifecycleを記述することができ、前述の理由により複数の傍観者を割り当てることができる.したがって、
viewLifecycleOwner
を使用してメモリ漏洩の問題を解決することができる.References
https://gift123.tistory.com/57
Reference
この問題について([Android] viewLifeCycleOwner), 我々は、より多くの情報をここで見つけました https://velog.io/@blucky8649/Android-viewLifeCycleOwnerテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol