![Android Jetpack应用指南](https://wfqqreader-1252317822.image.myqcloud.com/cover/927/32517927/b_32517927.jpg)
2.3 使用LifecycleService解耦Service与组件
2.3.1 LifeCycIeService基本介绍
在上文中,我们介绍了如何利用LifeCycle来监听页面的生命周期,以达到解耦组件的目的。我们知道,拥有生命周期概念的组件除了Activity和Fragment,还有一个非常重要的组件是Service。为了便于对Service生命周期的监听,达到解耦Service与组件的目的,Android提供了一个名为LifecycleService的类。该类继承自Service,并实现了LifecycleOwner接口。与Activity/Fragment类似,它也提供了一个名为getLifecycle()的方法供我们使用。LifecycleService的源码如下所示。
![](https://epubservercos.yuewen.com/BC5419/17545851006441506/epubprivate/OEBPS/Images/39055_36_1.jpg?sign=1739265580-pQK9VRnHtGaBBrmV8hnziAN9z9PUBiQQ-0-47b77465f0b5f02186c0e8b638ec8dc4)
2.3.2 LifecycIeService的具体使用方法
1.首先,我们需要在app的build.gradle文件中添加相关依赖。
![](https://epubservercos.yuewen.com/BC5419/17545851006441506/epubprivate/OEBPS/Images/39055_36_2.jpg?sign=1739265580-8PtacIfL8CePkurhpwo6BGpmUrtY0vBp-0-c08a861fdcda9e9ba596ebf4e0677704)
2.添加依赖后,便可以使用LifecycleService类了。创建一个名为MyService的类,并让它继承自LifecycleService。由于LifecycleService是Service的直接子类,所以使用起来与普通Service没有差别。
![](https://epubservercos.yuewen.com/BC5419/17545851006441506/epubprivate/OEBPS/Images/39055_37_1.jpg?sign=1739265580-3hGhu613JFlpyRPsMcp2SNEA63gfunt3-0-6bd96521cb5223cd54eda96fea1fd4ef)
3.接下来是MyServiceObserver类,该类需要实现LifecycleObserver接口。与此同时,使用@OnLifecycleEvent标签对那些你希望能够在Service生命周期发生变化时得到同步调用的方法进行标识。
![](https://epubservercos.yuewen.com/BC5419/17545851006441506/epubprivate/OEBPS/Images/39055_37_2.jpg?sign=1739265580-dhMjkWtn3yeMWfGGUxWyQYofqmiIIM6w-0-ede1bcc144d528951e580b2f90bae9a6)
4.最后,在页面中利用两个Button,控制Service的启动和停止,以测试我们的代码。
![](https://epubservercos.yuewen.com/BC5419/17545851006441506/epubprivate/OEBPS/Images/39055_38_1.jpg?sign=1739265580-lgdPJsFfllfNXJRtmLtI8WVJ5Smzi0Xd-0-5fde68c973223c5e24488708e5d84e53)
5.通过LogCat中的日志可以看到,随着Service生命周期的变化,MyServiceObserver中带有@OnLifecycleEvent标签的方法被自动调用了。这样,我们便实现了组件对Service生命周期的监听。
![](https://epubservercos.yuewen.com/BC5419/17545851006441506/epubprivate/OEBPS/Images/39055_38_2.jpg?sign=1739265580-kR2iEELlcBmHPYN6LYu1MKDDV77AWsLC-0-35e90906ae1d06e5366a11c25727a157)
通过以上示例可以看出,当Service的生命周期发生变化时,不再需要主动对组件进行通知,组件能够在其内部自行管理好生命周期所带来的变化。LifecycleService很好地实现了组件与Service之间的解耦。