zoukankan      html  css  js  c++  java
  • Jetpack学习之Lifecycle

    Lifecycle

    Lifecycle完美解决了组件对页面生命周期的依赖问题,使组件能够自己管理其生命周期。

    系统组件(Activity/Fragment、Service和Application),有生命周期。
    普通组件(也就是非系统组件/自定义组件)无法主动获知系统组件的生命周期事件。
    Lifecycle可以帮助创建可感知生命周期的组件。

    具体实现:
    1. 页面实现LifecycleOwner接口(在新版本的SDK中,Activity已经默认实现了该接口)。
    2. 观察者实现LifecycleObserver接口(该接口没有接口方法,无须任何具体的实现)。
    3. 在被观察者页面中通过getLifecycle().addObserver(observer)使观察者与被观察者绑定即可。

    另外,拥有生命周期概念的组件除了Activity和Fragment,还有Service和Application。

    要监听Service的生命周期,Android提供了一个类叫LifecycleService。该类继承自Service,并实现了LifecycleOwner接口。

    要监听应用程序的声明周期,Lifecycle提供了一个名为ProcessLifecycleOwner的类,以方便我们知道整个应用程序的生命周期情况。

    public class KotlinApplication extends Application {
    
        @Override
        public void onCreate() {
            super.onCreate();
            // 可用于想知道应用程序当前处在前台还是后台,或者当应用程序从后台回到前台时,我们能够得到通知。
            ProcessLifecycleOwner.get().getLifecycle().addObserver(new ApplicationObserver());
        }
    }
    
    

    例子:

    class MyLocationListener: LifecycleObserver{
        private val TAG = MyLocationListener::class.java.simpleName
        private lateinit var onLocationChangedCallback: OnLocationChangedCallback
    
        @OnLifecycleEvent(Lifecycle.Event.ON_RESUME)
        private fun startGetLocation(){
            Log.d(TAG, "startGetLocation()")
        }
    
        @OnLifecycleEvent(Lifecycle.Event.ON_STOP)
        private fun stopGetLocation(){
            Log.d(TAG, "stopGetLocation()")
        }
    
        fun setOnLocationChangedCallback(callback: OnLocationChangedCallback){
            this.onLocationChangedCallback = callback
        }
    
    }
    
    class LifecycleActivity : AppCompatActivity() {
    
        override fun onCreate(savedInstanceState: Bundle?) {
            super.onCreate(savedInstanceState)
            setContentView(R.layout.activity_lifecycle)
    
            val listener = MyLocationListener()
            listener.setOnLocationChangedCallback(object : OnLocationChangedCallback {
                override fun onChange() {
    
                }
            })
            // 将观察者与被观察者绑定
            lifecycle.addObserver(listener)
       }  
    }
    

    小结

    所有具有生命周期的组件都能够使用Lifecycle。包括Activity、Fragment、Service和Application。Lifecycle组件存在的主要意义是帮助我们解耦,让自定义组件也能够感受到生命周期的变化。

  • 相关阅读:
    5. Mybatis UPDATE更新,DELETE删除
    3. Mybatis Insert
    4. selectKey语句属性配置细节
    2. Mybatis Select
    uoj#282. 长度测量鸡(构造)
    uoj#276. 【清华集训2016】汽水(分数规划+点分治)
    uoj#275. 【清华集训2016】组合数问题(数位dp)
    uoj#274. 【清华集训2016】温暖会指引我们前行(LCT)
    uoj#273. 【清华集训2016】你的生命已如风中残烛(组合数学)
    uoj#272. 【清华集训2016】石家庄的工人阶级队伍比较坚强(矩阵+三维FWT)
  • 原文地址:https://www.cnblogs.com/touchmore/p/15030651.html
Copyright © 2011-2022 走看看