1.使用背景:我们希望组件不依赖于页面生命周期的回调方法,同时在生命周期变化的时候也能及时收到通知的背景下使用。
2.原理:观察者模式:两个类分别是LifecycleOwner(被观察者) 和LifecycleObserver(观察者),新版本SDK中 SupportActivity默认实现了LifecycleOwner接口中的getLifecycle(LifecycleObserver)方法 详细看代码。所以只需要实现观察者LifecycleObserver那部分代码即可。
更多内容https://juejin.im/post/6847902220755992589
https://developer.android.google.cn/topic/libraries/architecture/lifecycle
3.使用方法:
组件中方法上使用@OnLifecycleEvent(Lifecycle.Event.ON_XXX) 并实现 implements LifecycleObserver
页面中绑定:getLifecycle().addObserver(组件类实例)
4.使用LifecycleService解耦service和组件
添加依赖:implementation 'androidx.lifecycle:lifecycle-extensions:2.2.0'
Lifecycle.Event.ON_CREAT //service onCreate()时调用
Lifecycle.Event.ON_DESTROY //service onDestory()时调用
使用方法与上面相似
1)service 继承 LifecycleService
2)将观察者与被观察者绑定:getLifecycle().addObserver()
5.processLifecycleOwner 应用当前处于前台或后台使用 ,application中使用
添加依赖:implementation 'androidx.lifecycle:lifecycle-extensions:2.2.0'
application: ProcessLifecycleOwner.get().getLifecycle().addObserver(new ApplicationObserver());
ApplicationObserver:
Lifecycle.Event.ON_CREAT //应用程序的整个生命周期中只会被调用一次
Lifecycle.Event.ON_START//应用程序在前台出现时被调用
Lifecycle.Event.ON_RESUME//应用程序在前台出现时被调用
Lifecycle.Event.ON_PAUSE//应用程序退出后台时被调用
Lifecycle.Event.ON_STOP//应用程序退出后台时被调用
Lifecycle.Event.ON_DESTROY // 永远不会调用,系统不会分发调用
后台到前台 ON_START--->ON_RESUME
前台到后台(home 或 任务菜单)ON_PAUSE--->ON_STOP