Lifecycle 使用及原理

引言

Lifecycle 组件包括

  • LifecycleOwner
  • LifecycleObserver

Lifecycle 组件是执行操作以响应另一个组件(Activity或者Fragment)的生命周期状态的更改。

一、在Activity或者Fragment中的使用

class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main2)
lifecycle.addObserver(BluetoothDialog())
}
}
AppCompatActivity本身继承了LifecycleOwner接口,当owner生命周期变化时,观察者会执行相同生命周期变化的方法

二、自定义使用

1、定义观察者,继承 LifecycleObserver 

class BluetoothDialog : LifecycleObserver {

    @OnLifecycleEvent(Lifecycle.Event.ON_START)
    fun start(){
        println("start")
    }
}

2、定义被观察者,继承  LifecycleOwner ,即生命周期拥有者(事件发起者)

class BluetoothView : Button, LifecycleOwner {

    constructor(context: Context?) : this(context, null, 0)

    constructor(context: Context?, attrs: AttributeSet?) : this(context, attrs, 0)

    constructor(context: Context?, attrs: AttributeSet?, defStyleAttr: Int) :
            super(context, attrs, defStyleAttr) {
        registerObserver()
        setOnClickListener(OnClickListener {
            Log.i("aaa", "----OnClick")
            startLife()
        })
    }


    /**
     * 1 创建生命周期拥有者
     */
    private var lifecycleRegistry = LifecycleRegistry(this)

    override fun getLifecycle(): Lifecycle {
        return lifecycleRegistry
    }

    /**
     * 2 添加观察者
     */
    private fun registerObserver() {
        lifecycle.addObserver(BluetoothDialog())
    }

    /**
     * 3 分发事件
     */
    private var i = true;
    private fun startLife() {
        if (i) {
            lifecycleRegistry.handleLifecycleEvent(Lifecycle.Event.ON_START)
            lifecycleRegistry.handleLifecycleEvent(Lifecycle.Event.ON_RESUME)
        } else {
            lifecycleRegistry.handleLifecycleEvent(Lifecycle.Event.ON_PAUSE)
            lifecycleRegistry.handleLifecycleEvent(Lifecycle.Event.ON_STOP)
        }
        i = !i
    }

}

 参考: 

Android Jetpack架构组件(二)一文带你了解Lifecycle(使用篇) - 掘金 (juejin.cn)

Android Jetpack架构组件(三)一文带你了解Lifecycle(原理篇) - 掘金 (juejin.cn)

posted @ 2022-11-02 17:12  随易来了  阅读(417)  评论(0编辑  收藏  举报