Android Jetpack 之 Lifecycle - 2(2),flutter蓝牙打印

本文深入探讨了Android Jetpack中的Lifecycle组件,特别是LifecycleObserver接口和DefaultLifecycleObserver的使用。LifecycleObserver是声明生命周期观察者的标记接口,通过配合注解和Java 8的default方法实现监听生命周期事件。文章还介绍了如何从LifecycleObserver转换为DefaultLifecycleObserver,以减少不必要的方法实现,并讨论了框架内部的转换机制。最后,文章提到了通过注解处理器在编译时优化反射调用以提升性能。
摘要由CSDN通过智能技术生成

所以在分析 LifecycleRegistry之前我们先看下LifecycleObserver

生命周期观察者 (LifecycleObserver)

LifecycleObserver 基本介绍

标记接口 LifecycleObserver 表示生命周期观察者,是 lifecycle-aware 组件。

public interface LifecycleObserver {

}

这个接口用来声明它的实现类是生命周期观察者 ,我们要在这个类里接收到LifecycleOwner的生命周期变化事件,然后做自身逻辑。

但当我们看到LifecycleObserver这个接口时,第一感觉是比较奇怪:这个接口竟然是空的。那我们如何去接受生命周期变化的事件呢?(通常正常的是回调接口)

其实开头就介绍过用法了,google的做法是配合注解 OnLifecycleEvent 使用,LifecycleObserver 只是起一个声明和约束作用。其内部继承数如下图:

看到这么多类似的接口,我猜或许这是因为生命周期钩子比较多,如果全都放在接口里,那么实现者需要添加很多空实现方法,可阅读性降低。

比如FullLifecycleObserver

interface FullLifecycleObserver extends LifecycleObserver {

void onCreate(LifecycleOwner owner);

void onStart(LifecycleOwner owner);

void onResume(LifecycleOwner owner);

void onPause(LifecycleOwner owner);

void onStop(LifecycleOwner owner);

void onDestroy(LifecycleOwner owner);

}

这个接口就将所有的生命周期函数声明了,如果我们实现这个接口,就得重写所有接口,然而我们不一定要用这么多接口。(其实你想用也用不了,这个接口不是public,我们不能实现)

我们知道用注解的话大多数是反射解析的,这就涉及到性能问题,当然使用apt可以在编译期解决这个问题。这点后文会详细分析。

如果我们不想用注解,又不想一下子实现所有的方法,可以吗? 答案是肯定的。java8的接口default方法。而且google也鼓励我们用这种方式,那就是DefaultLifecycleObserver

DefaultLifecycleObserver

注意:在androidx.lifecycle.Lifecycle类的顶部注释里有一段

/**

  • If you use Java 8 Language, then observe events with {@link DefaultLifecycleObserver}.

  • To include it you should add {@code “androidx.lifecycle:common-java8:”} to your

  • build.gradle file.

  • class TestObserver implements DefaultLifecycleObserver {

  • {@literal @}Override
    
  • public void onCreate(LifecycleOwner owner) {
    
  •     // your code
    
  • }
    
  • }

  • If you use Java 7 Language, Lifecycle events are observed using annotations.

  • Once Java 8 Language becomes mainstream on Android, annotations will be deprecated, so between

  • {@link DefaultLifecycleObserver} and annotations,

  • you must always prefer {@code DefaultLifecycleObserver}.

  • class TestObserver implements LifecycleObserver {

  • {@literal @}OnLifecycleEvent(ON_STOP)

  • void onStopped() {}

  • }

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值