Lifecycle in Android
Overview
Lifecycle has two components
- Lifecycle owner
- Lifecycle observer
Steps to follow
- Add the required dependency in build.gradle (Module) file
def lifecycle_version = "2.4.0"
implementation "androidx.lifecycle:lifecycle-livedata-ktx:$lifecycle_version"
- Create a class and extend it with LifecycleObserver class (Note: this method is deprecated)
class MainActivityObserver : LifecycleObserver {
@OnLifecycleEvent(Lifecycle.Event.ON_CREATE)
fun onCreateCallback() {
Log.d("Main", "Observer - onCreate")
}
@OnLifecycleEvent(Lifecycle.Event.ON_START)
fun onStartCallBack() {
Log.d("Main", "Observer - onStop")
}
@OnLifecycleEvent(Lifecycle.Event.ON_RESUME)
fun onResumeCallback() {
Log.d("Main", "Observer - onResume")
}
@OnLifecycleEvent(Lifecycle.Event.ON_PAUSE)
fun onPauseCallback() {
Log.d("Main", "Observer - onPause")
}
@OnLifecycleEvent(Lifecycle.Event.ON_STOP)
fun onStopCallback() {
Log.d("Main", "Observer - onStop")
}
@OnLifecycleEvent(Lifecycle.Event.ON_DESTROY)
fun onDestroyCallback() {
Log.d("Main", "Observer - onDestroy")
}
}
- Create an object of the class in an Activity and use it in lifecycle.addObserver(...)
class MainActivity : AppCompatActivity() {
private lateinit var observer: MainActivityObserver
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
observer = MainActivityObserver()
lifecycle.addObserver(observer)
Log.d("Main", "Main - onCreate")
addDefaultLifeCycleObserver()
}
override fun onStart() {
super.onStart()
Log.d("Main", "Main - onStart")
}
override fun onResume() {
super.onResume()
Log.d("Main", "Main - onResume")
}
override fun onPause() {
super.onPause()
Log.d("Main", "Main - onPause")
}
override fun onStop() {
super.onStop()
Log.d("Main", "Main - onStop")
}
override fun onRestart() {
super.onRestart()
Log.d("Main", "Main - onRestart")
}
override fun onDestroy() {
super.onDestroy()
Log.d("Main", "Main - onDestroy")
}
private fun addDefaultLifeCycleObserver() {
val defaultLifecycleObserver = object : DefaultLifecycleObserver {
override fun onCreate(owner: LifecycleOwner) {
super.onCreate(owner)
Log.d("Main", "DefaultLifecycleObserver - onCreate")
}
}
lifecycle.addObserver(defaultLifecycleObserver)
}
}
Do's and Dont's
- LifecycleObserver is deprecated. You have to use DefaultLifecycleObserver in the following manner
private fun addDefaultLifeCycleObserver() {
val defaultLifecycleObserver = object : DefaultLifecycleObserver {
override fun onCreate(owner: LifecycleOwner) {
super.onCreate(owner)
Log.d("Main", "DefaultLifecycleObserver - onCreate")
}
}
lifecycle.addObserver(defaultLifecycleObserver)
}
}
Comments
Post a Comment