目录
一、概述
Lifecycle生命周期感知组件,是为了监听具有生命周期的(Activity或fragment等)组件的生命周期的变化。当组件(Activity/Fragment)生命周期发生变化时,观察者中事件对应方法会被回调。在观察者回调方法中可以做与组件(Activity/Fragment)生命周期变化对应的资源或者业务逻辑的处理(如,activity走了ondestroy后,观察者回调到事件ON_DESTROY后,在对应方法下做释放资源等操作)。观察者中监听回调方法也可以被其他对象监听,再做相应的处理。
二、组成
生命周期感知组件由三部分组成:
LifecycleOberver——组件生命周期变化监听者或观察者
LifecycleOwner——具有生命周期的组件需实现的接口(即,拥有生命周期的组件如Activity/Fragment)
Lifcycle——LifecycleOberver和LifecycleOwner之间实现感知生命周期变化的桥梁。存储有关组件(如Activity或Fragment)生命周期状态的抽象类。它使用枚举来表示不同的生命周期状态(如CREATED、STARTED、RESUMED等),并提供方法让观察者查询当前状态。
三、应用场景
生命周期感知组件在Android开发中有着广泛的应用场景,包括但不限于:
- 资源管理:在组件进入不同的生命周期阶段时,自动释放或重新分配资源,如停止后台任务、取消网络请求、释放Bitmap等,从而避免内存泄漏。
- UI更新:根据组件的生命周期状态变化,动态更新UI元素,如显示或隐藏某些视图。
- 数据加载:在组件处于活跃状态时加载数据,在组件进入非活跃状态时停止数据加载,以提升用户体验。
四、应用举例
1、LifecycleOwner实现类:
package com.example.lifecycle
import android.os.Bundle
import android.util.Log
import androidx.activity.ComponentActivity
import androidx.lifecycle.Lifecycle
class MainActivity : ComponentActivity() {//ComponentActivity实现了LifecycleOwner接口
private val TAG = "MainActivity"
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
Log.d(TAG,"onCreate")
//添加观察者监听生命周期的变化
lifecycle.addObserver(MyLifeCycleObserver())
}
fun getLifeCycle(): Lifecycle {
return lifecycle
}
override fun onStart() {
super.onStart()
Log.d(TAG,"")
}
override fun onResume() {
super.onResume()
Log.d(TAG,"onResume")
}
override fun onPause() {
super.onPause()
Log.d(TAG,"onPause")
}
override fun onStop() {
super.onStop()
Log.d(TAG,"onStop")
}
override fun onDestroy() {
super.onDestroy()
Log.d(TAG,"onDestroy")
}
}
2、LifecycleOberver观察者类
package com.example.lifecycle
import android.util.Log
import androidx.lifecycle.DefaultLifecycleObserver
import androidx.lifecycle.LifecycleOwner
class MyLifeCycleObserver : DefaultLifecycleObserver {
private val TAG = "MyLifeCycleObserver"
//在如下onCreate,onResume等回调方法里可以做跟生命周期方法变化相关联的业务逻辑或者界面逻辑的处理
override fun onCreate(owner: LifecycleOwner) {
super.onCreate(owner)
Log.d(TAG,"onCreate===========================")
}
override fun onStart(owner: LifecycleOwner) {
super.onStart(owner)
Log.d(TAG,"onStart============================")
}
override fun onResume(owner: LifecycleOwner) {
super.onResume(owner)
Log.d(TAG,"onResume==========================")
}
override fun onPause(owner: LifecycleOwner) {
super.onPause(owner)
Log.d(TAG,"onPause==========================")
}
override fun onStop(owner: LifecycleOwner) {
super.onStop(owner)
Log.d(TAG,"onStop===========================")
}
override fun onDestroy(owner: LifecycleOwner) {
super.onDestroy(owner)
Log.d(TAG,"onDestroy=========================")
}
}
3、上述代码运行输出结果如下
onCreate
onCreate===========================
onStart
onStart============================
onResume
onResume==========================
onPause==========================
onPause
onStop===========================
onStop
onDestroy=========================
onDestroy
推荐文章