前言
話說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)、結果如下圖所示
結果.png
分析:如圖所示,當我們剛進入的時候會執行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)、結果
TIM圖片20200805185431.png
分析: 可以看到,結果也是,當我們點擊開始按鈕的時候會執行onStart
方法,當我們點擊停止按鈕的時候會執行onStop
方法
最后
其實還有一個ProcessLifecycleOwner
可以監聽整個程序的生命周期,想想該怎么做呢?,好了,今天就到這里了,有寫的不對的地方歡迎指正。有不同的觀點的,可以進群(493180098
)我們共同探討啊。