Кто в слушателя жизненного цикла пихает данные

Ответ

В LifecycleObserver не следует помещать данные, так как его задача — реагировать на изменения жизненного цикла, а не хранить состояние. Для данных используйте:

  1. ViewModel — для хранения UI-данных, переживающих поворот экрана
  2. SavedStateHandle — для сохранения/восстановления данных при убийстве процесса
  3. Репозиторий/DataSource — для бизнес-логики и работы с сетью/БД

Пример неправильного подхода:

class BadObserver : LifecycleObserver {
    var userData: String? = null // ❌ Не храните данные здесь

    @OnLifecycleEvent(Lifecycle.Event.ON_RESUME)
    fun loadData() {
        // загрузка данных прямо в Observer
    }
}

Правильно — делегировать эти задачи соответствующим компонентам архитектуры.

Ответ 18+ 🔞

Слушай, а вот реально — народ иногда такое вытворяет, что просто ёпта. Представь себе: берут они LifecycleObserver, и начинают туда пихать данные, как в старый чемодан. Типа, о, классно, наблюдатель же, пусть за всем следит и данные хранит! Ну это ж пизда рулю полная, чувак.

Этот обсервер — он как швейцар у подъезда. Его работа — увидеть, что хозяин (Lifecycle) вошёл или вышел (ON_RESUME, ON_PAUSE), и доложить куда надо. А ты ему в карман начинаешь пихать свои покупки, ключи от другой квартиры и паспорт. Он же нихуя не для этого! Он для наблюдения, а не для хранения. Сделаешь так — получишь BadObserver, который и следит криво, и данные теряет при первом же повороте экрана. Удивление пиздец, правда?

Вот смотри, как не надо делать, прям классика жанра:

class BadObserver : LifecycleObserver {
    var userData: String? = null // ❌ Бля, ну что ты делаешь? Не храните данные здесь!

    @OnLifecycleEvent(Lifecycle.Event.ON_RESUME)
    fun loadData() {
        // И загрузка данных прямо тут же? Да ты гонишь, мудила!
    }
}

Чё происходит? Данные userData — они тут как хуй в пальто: вроде есть, но не на своём месте и всем неудобно. Убьют процесс — всё, прощай, данные. Повернёшь экран — может, останутся, а может, и нет, доверия ебать ноль. А загрузка в ON_RESUME — это вообще отдельная песня. Это ж надо было додуматься бизнес-логику в наблюдатель жизненного цикла воткнуть! Чистый распиздяйский подход.

А делать-то надо по-человечески, блядь. Для каждой задачи — свой инструмент, ебать копать.

  1. ViewModel — вот твой бронежилет для данных на экране. Поворот экрана? Похуй. ViewModel живёт и данные твои целы. Туда всё, что должно пережить конфигурацию.
  2. SavedStateHandle — а это уже на случай, если система совсем озвереет и процесс твой прибьёт. Через эту штуку данные в бункер спрячешь, а потом восстановишь. Как страховой полис.
  3. Репозиторий или DataSource — а это уже святая святых, бизнес-логика. Работа с сетью, базой данных, сложные преобразования. Observer не должен этим заниматься, его дело — сказать: "Чувак, хозяин проснулся (ON_RESUME), можешь данные запросить", а репозиторий уже сам решит, откуда их тянуть.

Короче, запомни: LifecycleObserver — не склад, а сигнальщик. Его задача — поднять флажок, когда состояние поменялось. А данные пусть живут там, где им положено, в своих VIP-комнатах: ViewModel, SavedStateHandle и репозиториях. Разделяй и властвуй, и не будет тебе хиросимы в коде.