Android(Kotlin)Jetpack组件之Lifecycles使用与API

  该文章作为学习总结与API查询,如有错误欢迎各位大佬指正,对您有帮助的还望点赞支持下哟(* ^ ▽ ^ *)

  欢迎大家聊聊理解,互相探讨,同时我也会将经典的问题更新到文章中,方便学习。

Lifecycles概述

  Lifecycles的作用: 用于让任何一个类都可以接收到Activity的生命周期,同时无需在Activity中编写大量的生命周期逻辑。
  解决的场景问题是:在很多情况下,显示在界面上的数据是需要变化的,如果当前界面不存在了,那么我们就不该对界面更新,或者对数据进行处理了。即,我们需要时刻能感知到界面(如:Activity)的生命周期。
例如:进行一个网络请求,当请求到结果时,界面可能不在了,那么就无需响应的结果进行处理了。

  • 在需要生命周期的的方法前加上@OnLifecycleEvent(Lifecycle.Event.xxx) 注解,即可将该方法与Activity的生命周期方法想关联,即Activity的生命周期方法调用时,该方法也会调用。

  • Lifecycle.Event枚举的值有:ON_CREATE、ON_START、ON_RESUME、ON_PAUSE、ON_STOP、ON_DESTROY、ON_ANY ;与Activity的生命周期想对应,其中ON_ANY 表示可以匹配Activity的任何生命周期回调。

  • 将Activity生命周期的变化与LifecycleObserver的实现类进行绑定,使用的是LifecycleOwner。完整的语法结构:lifecycleOwner.lifecycle.addObserver(LifecycleObserver实现类实例) 。即,调用lifecycleOwner的getLifecycle()方法,得到Lifecycle对象,使用addObserver进行绑定。

  • LifecycleOwner 我们可以手动创建,但只要Activity是继承AppCompatActivity的,或者Fragment是继承 androidx.fragment.app.Fragment 的,其本身就是一个LifecycleOwner实例,这时因为AndroidX库已经自动完成了。通常的写法是:lifecycle.addObserver(LifecycleObserver实现类实例)

  • 将lifecycle对象传给LifecycleObserver的实现类中,即可通过lifecycle.currentState(返回的是枚举)主动获取Activity当前的生命周期。其枚举值又DESTROYED、INITIALIZED、CREATED、STARTED、RESUMED 5种。

Activity生命周期状态与事件对应的关系。可以看出CREATED时,onCreate方法已经执行了,但onStart方法未执行,依次类推。
在这里插入图片描述

Lifecycles使用

依赖库

依赖库添与ViewModel的添加方式一样

LifecycleObserver与Activity的绑定及交互

  1. 创建一个实现了LifecycleObserver的自定义类,在该类中定义与Activity生命周期相关联的方法,并在添加@OnLifecycleEvent(Lifecycle.Event.xxx)的注解。
  2. 在Activity中,增加 lifecycle.addObserver(自定义实例) 进行绑定即可。这样当Activity生命周期变化时,关联的方法也会被回调。
  3. 要想主动了解Activity的生命周期,则需要将 lifecycle给LifecycleObserver的实现类中,通过lifecycle.currentState拿到当前Activity的生命周期状态。

示例代码

class MyObserver(val lifecycle: Lifecycle) : LifecycleObserver {

    @OnLifecycleEvent(Lifecycle.Event.ON_START)
    fun activityStart() {
        Log.e("bluePlus"," activityStart run ");
    }

    @OnLifecycleEvent(Lifecycle.Event.ON_STOP)
    fun activityStop() {
        Log.e("bluePlus"," activityStop run ");
    }

    fun sumNum(){
        Log.e("bluePlus"," State is " + lifecycle.currentState);
    }

}

class MainActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main_lifecycle)
        lifecycle.addObserver(MyObserver(lifecycle))
    }
}

觉得有帮助的点下赞哟,毕竟三连步骤更多,嘻嘻,谢谢大家的支持(* ^ ▽ ^ *)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值