美文网首页jetpackAPP & program
Android-Jetpack-LifeCycle组件的使用

Android-Jetpack-LifeCycle组件的使用

作者: 阿博聊编程 | 来源:发表于2022-04-11 13:46 被阅读0次
    图片来源网络

    在软件开发当中,解耦可能是永恒的话题。Android开发当中的解耦体现在系统组件的生命周期和普通组件之间的解耦,LifeCycle组件可以帮助我们做到。这篇文章就来分享关于LifeCycle的知识,希望对看文章的小伙伴有所启发。

    LifeCycle作用

    • 帮助开发者创建可感知生命周期的组件;
    • 组件能够在它的内部管理自己的生命周期,降低模块之间的耦合度;
    • 降低内存泄漏发生的可能性;
    • LifeCycleActivityFragmentServiceApplication都有用。

    LifeCycle的原理

    Jetpack为我们提供了两个类:

    • LifecycleOwner,被观察者;
    • LifecycleObserver,观察者。

    就是通过这两个类来实现对页面的生命周期的监听。Activity默认实现了LifecycleOwner的接口,我们可以通过getLifecycle方法来实现观察者模式。

    如果我们希望监听Activity的生命周期的时候,我们让自定义组件实现LifecycleObserver接口就可以了。

    使用LifeCycle解耦页面与组件

    假设我们监听用户的地理位置,想通过LifeCycle来做页面和组件的解耦,我们直接看代码示例:
    1.创建一个OnLocationListener类,实现LifecycleObserver接口。重点是组件通知生命周期的变化,我们就要在方法上使用@OnLifecycleEvent(Lifecycle.Event.ON_XXX)标签进行标识。

    import android.app.Activity
    import android.util.Log
    import androidx.lifecycle.LifecycleObserver
    import androidx.lifecycle.OnLifecycleEvent
    import androidx.lifecycle.Lifecycle
    
    class LocationListener(activity: Activity, var onLocationChangedListener: OnLocationChangedListener) :
        LifecycleObserver {
        /**
         * 当Activity执行onResume()方法时,该方法会自动调用
         */
        @OnLifecycleEvent(Lifecycle.Event.ON_RESUME)
        private fun startGetLocation() {
            Log.d("TAG", "startGetLocation()")
        }
    
        /**
         * 当Activity执行onPause()方法时,该方法会自动调用
         */
        @OnLifecycleEvent(Lifecycle.Event.ON_PAUSE)
        private fun stopGetLocation() {
            Log.d("TAG", "stopGetLocation()")
        }
    
        interface OnLocationChangedListener {
            fun onChanged(latitude: Double, longitude: Double)
        }
    
        private fun initLocationManager() {
            // 初始化相关的定位管理器
        }
    
        init {
            // 初始化操作
            initLocationManager()
        }
    }
    

    2.在MainActivity中调用,通过getLifecycle().addObserver()方法,将观察者与被观察者绑定起来:

    class MainActivity : AppCompatActivity(R.layout.activity_main) {
    
        @SuppressLint("UseCompatLoadingForDrawables")
        override fun onCreate(savedInstanceState: Bundle?) {
            super.onCreate(savedInstanceState)
            lifecycle.addObserver(LocationListener(this,object :LocationListener.OnLocationChangedListener{
                override fun onChanged(latitude: Double, longitude: Double) {
                    // 获取相关的信息
                }
            }))
        }
    }
    

    Fragment也是同理使用。

    相关文章

      网友评论

        本文标题:Android-Jetpack-LifeCycle组件的使用

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