前言
话说JetPack已经出现了好久了,并且自己的项目中也使用过相关的东西,但是,却没有系统的学习和使用以下,各个部分中的东西。近来刚好有时间,学习了部分东西,想着光说不练嘴把式,特此记录以下方便自己以后理解和学习。
首先
写这篇文章之前我们先要搞懂什么是
JetPack组件
,它里面又包含了什么?
- JetPack组件是什么?
Android Jetpack 组件是库的集合,这些库是为协同工作而构建的,不过也可以单独采用,同时利用 Kotlin 语言功能帮助您提高工作效率。可全部使用,也可混合搭配!
- JetPack组件包含什么?
- Databinding
- Lifecycles
- LiveData
- navigation
- paging
- Room
- viewmodel
- workmanager
-
camerax
等等,其他的可以去JetPack组件官网查询
其次
上面说了
JetPack
,那么来看看我们今天的主角Lifecycle
,那么什么又是Lifecycle
呢?
Lifecycle简单来说就是:生命周期感知型组件处理生命周期,这个怎么理解呢?activity、fragment和service中都会有生命周
期,之前我们写软件的时候都要考虑生命周期,如果一个处理不当,就可能导致出现各种Bug,这是一个很让人头疼的问题。当然,
官方也意识到了这个问题。所以,推出了Lifecycle这个生命周期感知库,让我们可以更方便的处理代码逻辑等问题。
- 上面说了那么多,那么来看看怎么使用的吧。
1、因为从26.1.0开始默认就实现了Lifecycle接口,查看activity和fragment的源码可以看到,如下图所示
2、showTime,来看看我们怎么在activity和service中使用Lifecycle
-
1)、创建一个LocationListener类,并且实现LifecycleObserver接口
class LocationListener : LifecycleObserver { @OnLifecycleEvent(Lifecycle.Event.ON_START) fun onStart() { Log.e("TAG", "onStart") } @OnLifecycleEvent(Lifecycle.Event.ON_STOP) fun onStop() { Log.e("TAG", "onStop") } }
分析 上面的代码中不仅实现了LifecycleObserver接口,还创建了两个方法。并且,在方法上增加了生命感知的注解ON_START
和ON_STOP
,其实,它里面还有ON_CREATE
、ON_RESUME
、ON_PAUSE
、ON_DESTROY
以及ON_ANY
,刚好和我们的activity的生命周期相互关联起来。
-
2)、在activity中绑定
val mLocationListener = LocationListener() lifecycle.addObserver(mLocationListener)
-
3)、结果如下图所示
分析:如图所示,当我们刚进入的时候会执行onStart
方法,当我们点击home键的时候会执行onStop
方法,可以看到,Lifecycle和activity的生命周期是一致的。 -
3、关于activity的运行了那么,service的呢?是否也可以如此执行?答案是肯定的,但是,这里需要添加一个依赖库。
implementation 'androidx.lifecycle:lifecycle-extensions:2.2.0'
为什么要添加一个在线依赖,而activty和fragment不需要呢?这是因为activity和fragment中默认是实现了LifecycleObserver
接口,但是,当你查看Service的时候却发现没有的。到这里你可能要问那么怎么感知servcie的生命周期呢?这里就体现到了上面添加的依赖上了。这里会有一个LifecycleService
,这个类是继承Service的,和Service的使用是一样的,并且它实现了LifecycleObserver
接口,如下图所示。
-
1)、好了,上图已经说明了Service也是可以感觉生命周期了,那么来看具体怎么实现
class LocationListener : LifecycleObserver { @OnLifecycleEvent(Lifecycle.Event.ON_START) fun onStart() { Log.e("TAG", "onStart===>Service") } @OnLifecycleEvent(Lifecycle.Event.ON_STOP) fun onStop() { Log.e("TAG", "onStop===>Service") } }
分析: 依然是使用LocationListener,并且添加了ON_START
和ON_STOP
的注解
-
2)、Service调用
class LocationServer : LifecycleService() { private lateinit var mLocationListener: LocationListener override fun onCreate() { super.onCreate() mLocationListener = LocationListener() lifecycle.addObserver(mLocationListener) } }
-
3)、activity中开始和停止调用servcie
private fun start() { val intent = Intent(this, LocationServer::class.java) startService(intent) } private fun stop() { val intent = Intent(this, LocationServer::class.java) stopService(intent) }
-
4)、结果
分析: 可以看到,结果也是,当我们点击开始按钮的时候会执行onStart
方法,当我们点击停止按钮的时候会执行onStop
方法
最后
其实还有一个ProcessLifecycleOwner
可以监听整个程序的生命周期,想想该怎么做呢?,好了,今天就到这里了,有写的不对的地方欢迎指正。有不同的观点的,可以进群(493180098
)我们共同探讨啊。