[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