Работал ли с Jetpack Lifecycle

Ответ

Да, работал. Jetpack Lifecycle помогает управлять жизненным циклом компонентов (Activity, Fragment) более декларативно. Основные классы: LifecycleOwner, LifecycleObserver.

Пример:

class MyObserver : LifecycleObserver {
    @OnLifecycleEvent(Lifecycle.Event.ON_RESUME)
    fun onResume() {
        Log.d("Lifecycle", "Resumed")
    }
}

// В Activity/Fragment:
lifecycle.addObserver(MyObserver())

Используется для автоматической отписки от событий, избегания утечек и упрощения кода. Часто применяется с LiveData, ViewModel.

Ответ 18+ 🔞

А, ну это же та самая штука, которая избавляет от вечного геморроя с onStart() и onStop()! Да, работал, конечно. Это Jetpack Lifecycle, он как личный ассистент для твоих активити и фрагментов — следит, чтобы они не накосячили с подписками и не потекли, как решето.

Смотри, суть проще пареной репы. Есть два главных героя:

  1. LifecycleOwner — это тот, у кого есть жизненный цикл. По умолчанию это Activity и Fragment. Они сами по себе уже кричат: «Эй, я живой, у меня есть цикл!»
  2. LifecycleObserver — это тот, кто подслушивает, что происходит с первым. Как шпион, который реагирует на события: «О, владелец возобновился!» или «Опа, владелец приказал долго жить!».

Вот смотри, как это выглядит в коде. Представь, что у тебя есть какой-то слушатель или менеджер, который должен включаться и выключаться вместе с активити:

// Это наш шпион-наблюдатель. Говорим ему: "Слушай жизненный цикл!"
class MyCoolObserver : LifecycleObserver {

    // Вешаем аннотацию на метод. Говорим: "Вызови эту функцию именно в момент ON_RESUME!"
    @OnLifecycleEvent(Lifecycle.Event.ON_RESUME)
    fun connectToService() {
        Log.d("App", "Всё, активити видно, можно стартовать тяжёлые операции")
    }

    @OnLifecycleEvent(Lifecycle.Event.ON_PAUSE)
    fun disconnectFromService() {
        Log.d("App", "Активити скрыли, надо бы притормозить, а то батарею сожрём")
    }
}

А потом в самой активити делаем просто до безобразия:

// В твоей Activity или Fragment:
override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    // Всё! Подписали наблюдателя. Теперь он сам всё услышит и отреагирует.
    lifecycle.addObserver(MyCoolObserver())
}

И всё, ёпта! Больше не нужно городить вызовы в onResume() и onPause(), помнить, чтобы везде отписаться. Наблюдатель сам прицепится и сам отцепится, когда нужно. Красота!

Зачем это всё, спросишь? Да чтобы голова не болела!

  • Утечек памяти не будет. Объект не будет висеть в памяти, если активити уже разрушена.
  • Код чище. Вся логика, связанная с жизненным циклом, собирается в одном наблюдателе, а не размазывается по активити.
  • Тестировать проще. Наблюдатель — это отдельный класс, его легко протестировать в изоляции.

Чаще всего эту магию используют в связке с LiveData и ViewModel. LiveData — она умная, она сама является LifecycleObserver. Когда ты подписываешься на неё из активити, она видит: «Ага, владелец умер, значит, новые данные ему слать не надо». И сама отписывается! Вообще, доверия ебать ноль к ручному управлению после этого, честно.

Короче, вещь обязательная к применению. Сначала кажется, что лишняя абстракция, а потом понимаешь — жить без неё уже не можешь, как без автоматической коробки передач после механики.