Jetpack---LifeCycle 组件内部管理自己的生命周期

1.使用背景:我们希望组件不依赖于页面生命周期的回调方法,同时在生命周期变化的时候也能及时收到通知的背景下使用。

2.原理:观察者模式:两个类分别是LifecycleOwner(被观察者) 和LifecycleObserver(观察者),新版本SDK中 SupportActivity默认实现了LifecycleOwner接口中的getLifecycle(LifecycleObserver)方法 详细看代码。所以只需要实现观察者LifecycleObserver那部分代码即可。

 

Jetpack---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