Android JetPack組件之Lifecycle初探

前言

話說JetPack已經出現了好久了,并且自己的項目中也使用過相關的東西,但是,卻沒有系統的學習和使用以下,各個部分中的東西。近來剛好有時間,學習了部分東西,想著光說不練嘴把式,特此記錄以下方便自己以后理解和學習。

首先

寫這篇文章之前我們先要搞懂什么是JetPack組件,它里面又包含了什么?

Android Jetpack 組件是庫的集合,這些庫是為協同工作而構建的,不過也可以單獨采用,同時利用 Kotlin 語言功能幫助您提高工作效率。可全部使用,也可混合搭配!

  • JetPack組件包含什么?
JetPack組件.png

其次

上面說了JetPack,那么來看看我們今天的主角Lifecycle,那么什么又是Lifecycle呢?

   Lifecycle簡單來說就是:生命周期感知型組件處理生命周期,這個怎么理解呢?activity、fragment和service中都會有生命周
期,之前我們寫軟件的時候都要考慮生命周期,如果一個處理不當,就可能導致出現各種Bug,這是一個很讓人頭疼的問題。當然,
官方也意識到了這個問題。所以,推出了Lifecycle這個生命周期感知庫,讓我們可以更方便的處理代碼邏輯等問題。
  • 上面說了那么多,那么來看看怎么使用的吧。

1、因為從26.1.0開始默認就實現了Lifecycle接口,查看activity和fragment的源碼可以看到,如下圖所示


activity中的Lifecycle.png
fragment中的Lifecycle.png

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_STARTON_STOP,其實,它里面還有ON_CREATEON_RESUMEON_PAUSEON_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接口,如下圖所示。

Service.png

  • 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_STARTON_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)我們共同探討啊。

?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。