Lifecycle
与LiveData
的讲解
lifecycle
Lifecycle
是生命周期感知型组件,什么是生命感知型组件?就是与Activity
或者Fragment
绑定之后,可执行一些操作来响应Activity和Fragment的生命周期状态的变化。
lifecycle
是一个类,用于存储有关组件(如 Activity
或 Fragment
)的生命周期状态的信息,并且允许其他对象观察此状态。Lifecycle
使用两种主要枚举跟踪其关联组件的生命周期状态:这两个枚举类分别是State和Event。
State:当前生命周期所处状态。有以下状态:CREATED
,STARTED
,RESUMED
,DESTROYED
,INITIALIZED
Event:当前生命周期改变对应的事件。 有以下事件:ON_CREATE
,ON_START
,ON_RESUME
,ON_PAUSE
,ON_STOP
,ON_DESTROY
,ON_ANY
;
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-oCzUr0zA-1641547282895)(https://developer.android.com/images/topic/libraries/architecture/lifecycle-states.svg?hl=zh-cn)]
注意这张事件和状态的转换图,它的意思是,从一开始的INITIALIZED
状态,经过了onCreate
事件,也就是Activity
或者Fragment
的onCreate
函数之后,他就变成了CREATED
状态,其他的事件和状态的转换同理。就不一一列举了。
LifecycleObserver
接口( Lifecycle
观察者):实现该接口的类,通过注解的方式,可以通过被LifecycleOwner
类的addObserver(o:LifecycleObserver)
方法注册,被注册后,LifecycleObserver
便可以观察到LifecycleOwner
的生命周期事件。
LifecycleOwner
接口(Lifecycle
持有者):实现该接口的类持有生命周期(Lifecycle
对象),Lifecycle
对象的改变会被其注册的观察者LifecycleObserver
观察到并触发其对应的事件。
通过以上介绍可以知道:实现 LifecycleObserver
的组件可与实现 LifecycleOwner
的组件完美配合,因为LifecycleOwner
可以提供生命周期,而LifecycleObserver
可以注册以便观察组件的生命周期。
LifeCycle
的用法:以官网的定位功能为例
//没有使用LifeCycle的情况
class MyActivity : AppCompatActivity() {
private lateinit var myLocationListener: MyLocationListener
override fun onCreate(...) {
myLocationListener = MyLocationListener(this) {
location ->
// update UI
}
}
public override fun onStart() {
super.onStart()
Util.checkUserStatus {
result ->
// 如果在活动停止后调用这个回调会怎样?可能会崩溃
if (result) {
myLocationListener.start()
}
}
}
public override fun onStop() {