簡(jiǎn)介
生命周期感知型組件:可以相應(yīng)另一個(gè)組件(Activity or Fragment)的生命周期變化弧烤。以便代碼更精簡(jiǎn)、易維護(hù)
作用
監(jiān)聽Activity 或 Fragment的生命周期變化
原理
觀察者模式波丰,在各個(gè)生命周期注冊(cè)相關(guān)回調(diào)壳坪,實(shí)現(xiàn)LifeCycleObsever 通過注釋的方式實(shí)現(xiàn)回調(diào)。
使用
角色
LifeCycleOwner 被觀察者(大部分時(shí)候是Actvity掰烟,F(xiàn)ragment)
AppCompatActivity與V4中的Fragment都已默認(rèn)實(shí)現(xiàn)了LifeCyclerOwner接口爽蝴,所以可以直接使用
LifeCycleObsever 觀察者(可以是任何類)
Activit 中使用
Activit:
getLifeCycle().addObserver(new LifeCycleObserver());
注:直接把實(shí)現(xiàn)了Observer 的類的實(shí)例傳進(jìn)去就行(默認(rèn)沒實(shí)現(xiàn)LifeCyclerOwner接口的自己手動(dòng)實(shí)現(xiàn)一下扩灯,并在各個(gè)生命周期添加對(duì)應(yīng)的調(diào)用)
觀察者:
繼承LifeCycleObserve類,或者繼承他的子類
隨便寫個(gè)方法
添加注釋@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());
}
這樣這個(gè)方法就會(huì)在對(duì)應(yīng)的生命周期回調(diào)的時(shí)候調(diào)用了
其他生命周期一樣的寫法只是Even不同
注:LifeCycle.Even.Any 這個(gè)帶表的是任何生命周期,可以在這里監(jiān)聽生命周期的變化惧磺,能獲取到切換到的生命周期
Fragment 中使用
和Activity相同
獲取當(dāng)前生命周期
方法中添加 LifecycleOwner 參數(shù)
@OnLifecycleEvent(Lifecycle.Event.ON_DESTROY)
@OnLifecycleEvent(Lifecycle.Event.ON_ANY)
fun onLifecycleChanged(
owner: LifecycleOwner,
event: Lifecycle.Event
){
owner.lifecycle
Log.d(TAG,"onLifecycleChanged...")
}