美文网首页程序员
Android JetPack组件之Lifecycle初探

Android JetPack组件之Lifecycle初探

作者: Silence潇湘夜雨 | 来源:发表于2020-08-05 19:02 被阅读0次

前言

话说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)我们共同探讨啊。

相关文章

网友评论

    本文标题:Android JetPack组件之Lifecycle初探

    本文链接:https://www.haomeiwen.com/subject/vdeorktx.html