Android开发学习笔记——Jetpack之Lifecycle

本文详细介绍了Android Jetpack中的Lifecycle组件,它是一个生命周期感知组件,用于简化生命周期管理。通过Lifecycle,开发者可以将组件的行为与Activity或Fragment的生命周期状态自动同步,避免在生命周期回调中处理操作。文章讲解了基本使用,包括如何监听Activity和Fragment的生命周期,以及如何自定义LifecycleOwner。此外,还探讨了Lifecycle的基本实现原理,涉及Lifecycle、Lifecycle.State、Lifecycle.Event、LifecycleObserver和LifecycleOwner等关键概念,帮助开发者更好地理解和应用Lifecycle。
摘要由CSDN通过智能技术生成

概述

Lifecycle与LiveData以及ViewModel相同,都是谷歌推出的Jetpack中的重要一员,Lifecycle是一个生命周期感知组件,用于感知生命周期的变化帮助我们在特定时期处理相关操作。
在开发中,为了处理生命周期,一种常见的模式是在 Activity 和 Fragment 的生命周期方法中实现依赖组件的操作。比如,在一般的MVP模式中,我们通常在Presenter中处理页面逻辑,我们时常会遇到Presenter需要初始化和销毁资源的操作,这时,我们需要在Presenter中创建相关方法,然后在Activity中的onCreate和onDestroy中调用对应方法完成初始化和销毁操作。如下:

class MyPresenter {
   
    fun create(){
   
        // TODO presenter相关初始化操作
    }
    fun destroy(){
   
        // TODO presenter相关销毁、释放资源等操作
    }
}


class LifecycleActivity : AppCompatActivity() {
   

    private var mPresenter : MyPresenter? = null
    override fun onCreate(savedInstanceState: Bundle?) {
   
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_lifecycle)

        mPresenter = MyPresenter()
        mPresenter?.create()
    }

    override fun onDestroy() {
   
        super.onDestroy()
        mPresenter?.destroy()
    }
}

当我们或许需要在onStop、onResume等其它相关生命周期中执行相关操作时,我们又需要添加相关方法然后在Activity中调用。当然,我们可以封装相关基类在基类中实现调用,但是,如果还有其它类需要监听生命周期变化呢?又或者需要监听其它组件的生命周期呢?那么我们只能多次进行处理。这种操作本身没有什么问题,但是,这种模式会导致代码条理性很差而且会扩散错误。而通过使用生命周期感知型组件Lifecycle,我们可以将依赖组件的代码从生命周期方法移入组件本身中。
Lifecycle提供了可用于构建生命周期感知型组件的类和接口, 这些组件可以根据 Activity 或 Fragment 的当前生命周期状态自动调整其行为,从而使我们无需在Activity或者使Fragment的生命周期回调方法中处理相关操作。

基本使用

Lifecycle的使用方法很简单,实际上,其实现也是通过观察者模式实现的。因此,我们只需要我们也只需要提供观察者LifecycleObserver和被观察者LifecycleOwner即可。不过通常,当我们生命周期的对象为Activity,其默认实现了LifecycleOwner接口,因此,我们只需要实现LifeObserver即可。Lifecycle的基本使用大致可以分为以下几步:

  • 添加Lifecycle的相关依赖;
  • 生命周期的拥有者实现LifecycleOwner接口,并且在对应的生命周期回调方法中改变Lifecycle状态;
  • 需要监听生命周期变化的观察者,实现LifecycleObserver接口,使用OnLifecycleEvent注解对应监听生命周期变化;
  • 调用Lifecycle的addObserve方法注册观察者;

监听Activity或是Fragment的生命周期

对于Activity和Fragment,其默认实现了LifecycleOwner接口,因此,当我们需要简体Activity或是Fragment的生命周期时,我们只需要在相应的类中实现LifecycleObserve或是FullLifecycleObserver即可。如上例中MyPresenter,我们实现LifecycleObserve接口,在其中使用OnLifecycleEvent注解监听生命周期,可以修改如下:

class MyPresenter : LifecycleObserver {
   

    @OnLifecycleEvent(Lifecycle.Event.ON_CREATE)
    private fun create(){
   
        Log.e("MyPresenter", "create")
    }

    @OnLifecycleEvent(Lifecycle.Event.ON_START)
    private fun start(){
   
        Log.e("MyPresenter", "start")
    }

    @OnLifecycleEvent(Lifecycle.Event.ON_RESUME)
    private fun resume(){
   
        Log.e("MyPresenter", "resume")
    }

    @OnLifecycleEvent(Lifecycle.Event.ON_PAUSE)
    private fun pause(){
   
        Log.e("MyPresenter", "pause")
    }

    @OnLifecycleEvent(Lifecycle.Event.ON_STOP)
    private fun stop(){
   
        Log.e("MyPresenter", "stop")
    }

    @OnLifecycleEvent(Lifecycle.Event.ON_DESTROY)
    private fun destroy(){
   
        Log.e("MyPresenter", "destroy")
    }

    @OnLifecycleEvent(Lifecycle.Event.ON_ANY)
    private fun any(){
   
        Log.e("MyPresenter", "any")
    }
}

我们修改Activity中的代码,调用addObserver方法添加观察者,运行程序,发现此时Presenter类即可监听到Activity的生命周期变化,这样,我们就不需要在Activity生命周期变化的时候去回调Presenter的方法,而是在Presenter中处理相关操作。

class LifecycleActivity : AppCompatActivity() {
   

    private var mPresenter : MyPresenter? = null
    override fun onCreate(savedInstanceState: Bundle?) {
   
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_lifecycle)
        mPresenter = MyPresenter()
        //添加观察者,观察Activity的生命周期变化
        lifecycle.addObserver(mPresenter!!)
        Log.e("Activity", "onCreate")
 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值