Jetpack系列(二) — Lifecycle

Jetpack系列(二) — Lifecycle

Lifecycle简单介绍

初步印象

Lifecycle 是为了在Activity 之外感知Activity 的生命周期,可用于替代写在生命周期回调函数当中的方法。
Lifecycle 的作用等效于接口回调

基本概念

Lifecycle 是一个类,用于存储有关组件(如 Activity 或 Fragment)的生命周期状态的信息,并允许其他对象观察此状态。

  • 使用枚举跟踪其关联组件的生命周期状态

LifecycleOwner 是单一方法接口,表示类具有 Lifecycle。它具有一种方法(即 getLifecycle()),该方法必须由类实现。

LifecycleObserver 是空接口

Lifecycle 基本使用

实现LifecycleObserver

  1. 创建LifecycleObserver 实现类
    class MyObserver : LifecycleObserver {
    
        @OnLifecycleEvent(Lifecycle.Event.ON_START)
        fun activityStart() {
            Log.d("=====", "ACTIVITY START")
        }
    
        @OnLifecycleEvent(Lifecycle.Event.ON_RESUME)
        fun connectListener() {
            Log.d("=====", "ACTIVITY RESUME")
        }
    
        @OnLifecycleEvent(Lifecycle.Event.ON_PAUSE)
        fun disconnectListener() {
            Log.d("=====", "ACTIVITY PAUSE")
        }
    
        @OnLifecycleEvent(Lifecycle.Event.ON_STOP)
        fun activityStop() {
            Log.d("=====", "ACTIVITY STOP")
        }
    }
    复制代码
  2. 通过调用 Lifecycle 类的 addObserver() 方法并传递观察者的实例来添加观察者
    // MainActivity.kt
    lifecycle.addObserver(MyObserver())
    复制代码

相关知识点

知识点一: Lifecycle 事件映射到 Activity 和 Fragment 中的回调事件

生命周期状态示意图

知识点二: LifecycleOwner更多

  • LifecycleOwner是单一方法接口,表示类具有 LifecycleLifecycleObserverLifecycleOwner的配合,后者提供生命周期,后者观察生命周期。
    // ComponentActivity.java
    @NonNull
    @Override
    public Lifecycle getLifecycle() {
      return mLifecycleRegistry;
    }
    
    // Fragment.java
    @Override
    @NonNull
    public Lifecycle getLifecycle() {
        return mLifecycleRegistry;
    }
    复制代码
  • 自定义 LifecycleOwner,使用LifecycleRegistry实现自定义LifecycleOwner
    // 官网代码
    class MyActivity : Activity(), LifecycleOwner {
    
        private lateinit var lifecycleRegistry: LifecycleRegistry
    
        override fun onCreate(savedInstanceState: Bundle?) {
            super.onCreate(savedInstanceState)
    
            lifecycleRegistry = LifecycleRegistry(this)
            lifecycleRegistry.markState(Lifecycle.State.CREATED)
        }
    
        public override fun onStart() {
            super.onStart()
            lifecycleRegistry.markState(Lifecycle.State.STARTED)
        }
    
        override fun getLifecycle(): Lifecycle {
            return lifecycleRegistry
        }
    }
    复制代码

知识点三: Lifecycle类查询当前状态

  • Lifecycle 查询当前状态
    if (lifecycle.currentState.isAtLeast(Lifecycle.State.CREATED)) {
        Log.d("=====", "ACTIVITY START STARTED")
    }
    复制代码

相关链接

参考资料

© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享