Android Jetpack-Lifecycle

131 阅读1分钟

Jetpack LifeCycle

Lifecycle-aware 组件是一个生命周期感知组件,可以简化Android中具有生命周期组件的逻辑处理(例如Activity和Fragment生命周期函数中的自定义逻辑)

此组件是通过观察者模式来实现的,被观察者是实现了LifecycleOwner接口的类,观察者是实现了LifecycleObserver的类

使用方式

1.引入依赖

implementation("androidx.lifecycle:lifecycle-runtime:2.6.1")

2.实现自己的LifeCycleObserver(三种方式)

<1> 通过实现DefaultLifecycleObsever


import android.util.Log
import androidx.lifecycle.DefaultLifecycleObserver
import androidx.lifecycle.LifecycleOwner

/**
* 自定义生命周期观察者
  */
  class MyObserver : DefaultLifecycleObserver {
  companion object {
  val TAG: String = MyObserver::class.java.simpleName
  }

  override fun onResume(owner: LifecycleOwner) {
  super.onResume(owner)
  Log.d(TAG, "onResume")
  }

  override fun onPause(owner: LifecycleOwner) {
  super.onPause(owner)
  Log.d(TAG, "onPause")
  }

  override fun onStart(owner: LifecycleOwner) {
  super.onStart(owner)
  Log.d(TAG, "onStart")
  }

  override fun onCreate(owner: LifecycleOwner) {
  super.onCreate(owner)
  Log.d(TAG, "onCreate")
  }

  override fun onDestroy(owner: LifecycleOwner) {
  super.onDestroy(owner)
  Log.d(TAG, "onDestroy")
  }

  override fun onStop(owner: LifecycleOwner) {
  super.onStop(owner)
  Log.d(TAG, "onStop")
  }


}

<2> 通过实现LifecycleEventObserver

package zeng.qiang.jetpack.lifecycle

import android.util.Log
import androidx.lifecycle.Lifecycle
import androidx.lifecycle.LifecycleEventObserver
import androidx.lifecycle.LifecycleOwner

class MyObserverByLifecycleEventObserver : LifecycleEventObserver {
    companion object {
        val TAG: String = MyObserverByLifecycleEventObserver::class.java.simpleName
    }

    override fun onStateChanged(source: LifecycleOwner, event: Lifecycle.Event) {
        when (event) {
            Lifecycle.Event.ON_CREATE -> {
                Log.d(TAG, "onCreate")
            }

            Lifecycle.Event.ON_RESUME -> {
                Log.d(TAG, "onResume")
            }

            Lifecycle.Event.ON_DESTROY -> {
                Log.d(TAG, "onDestroy")
            }

            Lifecycle.Event.ON_START -> {
                Log.d(TAG, "onStart")
            }

            Lifecycle.Event.ON_PAUSE -> {
                Log.d(TAG, "onPause")
            }

            Lifecycle.Event.ON_STOP -> {
                Log.d(TAG, "onStop")
            }

            Lifecycle.Event.ON_ANY -> {
                Log.d(TAG, "onAny")
            }

        }
    }
}

<3> 通过实现LifecycleObserver搭配@OnlifecycleEvent注解(此种方式注解已被标记废弃,不推荐使用)

package zeng.qiang.jetpack.lifecycle

import android.util.Log
import androidx.lifecycle.Lifecycle
import androidx.lifecycle.LifecycleObserver
import androidx.lifecycle.OnLifecycleEvent

class MyObserverByLifecycleObserver : LifecycleObserver {
    companion object {
        val TAG: String = MyObserverByLifecycleObserver::class.java.simpleName
    }

    @OnLifecycleEvent(Lifecycle.Event.ON_CREATE)
    fun onCreate() {
        Log.d(TAG, "onCreate")

    }

    @OnLifecycleEvent(Lifecycle.Event.ON_RESUME)
    fun onResume() {
        Log.d(TAG, "onResume")

    }

    @OnLifecycleEvent(Lifecycle.Event.ON_DESTROY)
    fun onDestroy() {
        Log.d(TAG, "onDestroy")
    }


}

3.在LifecycleOwner 中注册Observer

package zeng.qiang.jetpack

import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import zeng.qiang.jetpack.lifecycle.MyObserver

class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)

lifecycle.addObserver(MyObserverByDefaultLifecycleObserver())
lifecycle.addObserver(MyObserverByLifecycleObserver())
lifecycle.addObserver(MyObserverByLifecycleEventObserver())

    }
}

通过以上方式,我们就简单使用DefaultLifecycleObserver 完成了Activity中各个生命周期逻辑的抽取,完成了Activity生命周期代码的简化

实现自己的LifecycleOwner


import android.app.Activity
import android.os.Bundle
import androidx.lifecycle.Lifecycle
import androidx.lifecycle.LifecycleOwner
import androidx.lifecycle.LifecycleRegistry

open class MyActivity : Activity(), LifecycleOwner {
    private lateinit var lifecycleRegistry: LifecycleRegistry
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        lifecycleRegistry = LifecycleRegistry(this)
    }
    
    override fun getLifecycle(): Lifecycle {
        return lifecycleRegistry
    }
}