В чем разница между lifecycleOwner и viewLifecycleOwner

«В чем разница между lifecycleOwner и viewLifecycleOwner» — вопрос из категории Android компоненты, который задают на 23% собеседований Android Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

lifecycleOwner (обычно this в Fragment) привязан к жизненному циклу фрагмента, а viewLifecycleOwner — к жизненному циклу его View.

Ключевые отличия:

  • lifecycleOwner живет дольше (от onAttach() до onDetach()).
  • viewLifecycleOwner уничтожается раньше (от onCreateView() до onDestroyView()).

Когда использовать:

  • Для подписок, связанных с View (например, LiveData в UI) — viewLifecycleOwner, чтобы избежать утечек после onDestroyView().
  • Для подписок, не зависящих от View (например, обновление данных) — lifecycleOwner.

Пример:

viewModel.data.observe(viewLifecycleOwner) { data ->  
    binding.textView.text = data  
}