Ответ
Да, работал. 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, он как личный ассистент для твоих активити и фрагментов — следит, чтобы они не накосячили с подписками и не потекли, как решето.
Смотри, суть проще пареной репы. Есть два главных героя:
LifecycleOwner— это тот, у кого есть жизненный цикл. По умолчанию этоActivityиFragment. Они сами по себе уже кричат: «Эй, я живой, у меня есть цикл!»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. Когда ты подписываешься на неё из активити, она видит: «Ага, владелец умер, значит, новые данные ему слать не надо». И сама отписывается! Вообще, доверия ебать ноль к ручному управлению после этого, честно.
Короче, вещь обязательная к применению. Сначала кажется, что лишняя абстракция, а потом понимаешь — жить без неё уже не можешь, как без автоматической коробки передач после механики.