Подписка во фрагменте с this вместо владельца жизненного цикла View
Во фрагменте списка заказов подписка оформлена так:
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
viewModel.orders.observe(this) { adapter.submitList(it) }
}
Пользователь уходит с этого фрагмента на другой экран и возвращается назад несколько раз. Что происходит с подписками?
- Приложение падает при первом же обновлении данных после возврата: обработчик обращается к View, которой уже нет в иерархии
- Ничего особенного: подписка снимается автоматически в момент уничтожения вёрстки, при возврате остаётся ровно одна активная подписка
- Подписок становится всё больше: фрагмент живёт дольше своей вёрстки, и старые подписки держат уничтоженные View
- Подписка теряется совсем: после первого же возврата данные в этот фрагмент больше не приходят, пока не пересоздать весь экран
