LifeCycle
2021-12-28 本文已影响0人
EraJieZhang
简介
生命周期感知型组件:可以相应另一个组件(Activity or Fragment)的生命周期变化。以便代码更精简、易维护
作用
监听Activity 或 Fragment的生命周期变化
原理
观察者模式,在各个生命周期注册相关回调,实现LifeCycleObsever 通过注释的方式实现回调。
使用
角色
LifeCycleOwner 被观察者(大部分时候是Actvity,Fragment)
AppCompatActivity与V4中的Fragment都已默认实现了LifeCyclerOwner接口,所以可以直接使用
LifeCycleObsever 观察者(可以是任何类)
Activit 中使用
Activit:
getLifeCycle().addObserver(new LifeCycleObserver());
注:直接把实现了Observer 的类的实例传进去就行(默认没实现LifeCyclerOwner接口的自己手动实现一下,并在各个生命周期添加对应的调用)
观察者:
继承LifeCycleObserve类,或者继承他的子类
随便写个方法
添加注释@OnLifeCycleEven(LifeCycle.Even.ON_RESUME)
- LifeCycle.Even.ON_CREATE
- LifeCycle.Even.ON_START
- LifeCycle.Even.ON_RESUME
- LifeCycle.Even.ON_PAUSE
- LifeCycle.Even.ON_STOP
- LifeCycle.Even.ON_DESTROY
- LifeCycle.Even.ON_ANY (可用于匹配所有事件的事件常量。)
@OnLifecycleEvent(Lifecycle.Event.ON_ANY)
void onAny(LifecycleOwner owner, Lifecycle.Event event) {
System.out.println("onAny:" + event.name());
}
这样这个方法就会在对应的生命周期回调的时候调用了
其他生命周期一样的写法只是Even不同
注:LifeCycle.Even.Any 这个带表的是任何生命周期,可以在这里监听生命周期的变化,能获取到切换到的生命周期
Fragment 中使用
和Activity相同
获取当前生命周期
方法中添加 LifecycleOwner 参数
@OnLifecycleEvent(Lifecycle.Event.ON_DESTROY)
@OnLifecycleEvent(Lifecycle.Event.ON_ANY)
fun onLifecycleChanged(
owner: LifecycleOwner,
event: Lifecycle.Event
){
owner.lifecycle
Log.d(TAG,"onLifecycleChanged...")
}