Jetpack-Lifecycle

lifecycle是jetpack的架构组件成员,其主要作用是对Activity/Fragment的生命周期进行监听。比如:监听activity的onStart()状态来进行耗时操作,onDestory()进行资源的回收销毁等。

lifecycle的主要几个类

  • lifecycle
    核心抽象类,继承该类的子类具有Andorid生命周期特性的对象。
  • lifecycleRegister
    lifecycle的唯一子类,在生命周期变化时触发自身状态和相关观察者的订阅回调逻辑。
  • lifecycleOwner
    接口,该接口的实现类可以提供lifecycle的实例,主要实现类就是Activity和Fragment。
  • lifecycleObserver
    该接口的实现类表示为关注生命周期事件的观察者。

lifecycle的主要几个方法

  • addObserver()
    调用addObserver方法新添加一个LifecycleObserver。
  • removeObserver()
    不用说,移除一个LifecycleObserver。
  • getCurrentState()
    获取lifecycle的状态。

练习

创建一个生命周期的接口

interface IPresent {
    fun onCreat()
    fun onStart()
    fun onResume()
    fun onPause()
    fun onStop()
    fun onDestory()
}

注意:lifecycle没有Activity的onRestart()周期的订阅观察。
生命周期的接口的实现类

class Present : IPresent,LifecycleObserver{

    @OnLifecycleEvent(Lifecycle.Event.ON_CREATE)
    override fun onCreat() {
        Log.d(TAG, "onCreat: ")
    }
    
    //onAny是每个生命周期都会调用到一次
   //@OnLifecycleEvent(Lifecycle.Event.ON_ANY)
    
    @OnLifecycleEvent(Lifecycle.Event.ON_START)
    override fun onStart() {
        Log.d(TAG, "onStart: ")
    }
    @OnLifecycleEvent(Lifecycle.Event.ON_RESUME)
    override fun onResume() {
        Log.d(TAG, "onResume: ")
    }
    @OnLifecycleEvent(Lifecycle.Event.ON_PAUSE)
    override fun onPause() {
        Log.d(TAG, "onPause: ")
    }
    @OnLifecycleEvent(Lifecycle.Event.ON_STOP)
    override fun onStop() {
        Log.d(TAG, "onStop: ")
    }
    @OnLifecycleEvent(Lifecycle.Event.ON_DESTROY)
    override fun onDestory() {
        Log.d(TAG, "onDestory: ")
    }
}

注意:还有一个Lifecycle.Event.ON_ANY的注解,是每个生命周期都会调用到一次。

MainActivity的监听

class MainActivity : AppCompatActivity() {
    companion object{
        const val TAG = "MainActivity"
    }

    val present = Present()
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
       //lifecycle订阅观察者
        lifecycle.addObserver(present)
        var  btnJump =findViewById

打印:


image.png

lifecycle的使用就是这么简单,难点是去了解它的工作原理,这就需要查看源码了。推荐阅读文章。

你可能感兴趣的:(Jetpack-Lifecycle)