EventBus封装到项目架构|青训营笔记

简介: 封装该库到自己的项目的目的有两个便捷绑定和解绑 EventBus便捷通过 EventBus 发送消息和处理消息代码美观

前置知识

封装过程

封装该库到自己的项目的目的有两个

  1. 便捷绑定和解绑 EventBus
  2. 便捷通过 EventBus 发送消息和处理消息
  3. 代码美观

基于上面的目的,我们可以利用 注解 、编写 工具类封装到基类抽象消息类 来实现

依赖引入

我们先引入对应的依赖

//build.gradle(:app)
defaultConfig {
    ...
    javaCompileOptions {
        annotationProcessorOptions {
            //此处路径填写自己的包名+类名
            arguments = [ eventBusIndex : 'com.qxy.potato.MyEventBusIndex' ]
        }
    }
    ...
}
dependencies {
    ...
    //eventBus
    def eventbus_version = '3.2.0'
    implementation "org.greenrobot:eventbus:$eventbus_version"
    annotationProcessor "org.greenrobot:eventbus-annotation-processor:$eventbus_version"
}
复制代码

上面引入了 EventBus的注解器,该注解器可以帮忙生成 索引,大幅度提高EventBus的使用效率

1.webp.jpg

由上图可知,使用了注解可以利用索引的 EventBus ,效率是可以大幅度提升的,所以我们是很有必要去利用EventBus的索引类

使用索引的时候,我们需要注意如下点

索引要求

  • @Subscribe方法及其类必须是公共的
  • 事件类必须是公共的
  • @Subscribe不能****在匿名类内部使用。

注意: 当 EventBus 无法使用索引时,例如,如果不满足上述要求,它将在运行时回退到反射。这可确保@Subscribe方法接收事件,即使它们不是索引的一部分。

Translate from Subscriber Index - Open Source by greenrobot

编写工具类

public class EventBusUtil {
    /**
     * 发送消息(事件)
     * @param event
     */
    public static void sendEvent(BaseEvent<?> event){
        EventBus.getDefault().post(event);
    }
    /**
     * 发送 粘性 事件
     *
     * 粘性事件,在注册之前便把事件发生出去,等到注册之后便会收到最近发送的粘性事件(必须匹配)
     * 注意:只会接收到最近发送的一次粘性事件,之前的会接受不到。
     * @param event
     */
    public static void sendStickyEvent(BaseEvent<?> event){
        EventBus.getDefault().postSticky(event);
    }
}
复制代码

编写注解类

@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
public @interface BindEventBus {
}
复制代码

Base封装

public class BaseEvent<T> {
    private int eventCode;
    private T data;
    public BaseEvent(int eventCode, T data) {
        this.eventCode = eventCode;
        this.data = data;
    }
    public int getEventCode() {
        return eventCode;
    }
    public void setEventCode(int eventCode) {
        this.eventCode = eventCode;
    }
    public T getData() {
        return data;
    }
    public void setData(T data) {
        this.data = data;
    }
}
复制代码
//Fragment也是类似
public abstract class BaseActivity{
    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        if(this.getClass().isAnnotationPresent(BindEventBus.class)){
            EventBus.getDefault().register(this);
        }
    }
    @Override
    protected void onDestroy() {
        super.onDestroy();
        if(this.getClass().isAnnotationPresent(BindEventBus.class)){
            EventBus.getDefault().unregister(this);
        }
    }
}
复制代码

生成索引类

@BindEventBus
public class MainActivity extends BaseActivity{
    /**
     * 载入view的一些操作
     */
    @Override
    protected void initView() {
        PictureGirl girl = new PictureGirl();
        BaseEvent<PictureGirl> ev = new BaseEvent<>(1,girl);
        EventBusUtil.sendEvent(ev);
    }
    @Subscribe(threadMode = ThreadMode.MAIN)
    public void onMainActivityEvent(BaseEvent event){
    }
}
复制代码

我们在需要使用到EventBus的对应继承类处添加 @BindEventBus 注解,先实现一个空的事件发送和接收。然后点击 AS 的 build->Rebuild Project,对项目进行编译。

编译结束后,我们可以可以在buid类中找到 MyEventBusIndex

1.webp.jpg

声明添加索引

public class App extends Application {
    @Override
    public void onCreate() {
        super.onCreate();
        //使用订阅索引,加快编译速度
        EventBus.builder().addIndex(new MyEventBusIndex()).installDefaultEventBus();
    }
}
复制代码

使用

惨遭上文 生成索引类处的使用,在对应继承类中加入注解,发送消息时候使用 EventBusUtil 工具类即可



相关文章
|
2月前
|
存储 负载均衡 网络协议
杨老师课堂之JavaWeb项目架构之NFS文件服务器
杨老师课堂之JavaWeb项目架构之NFS文件服务器
32 0
|
16天前
|
存储 负载均衡 架构师
架构笔记汇总
架构笔记汇总
50 1
|
26天前
|
JSON JavaScript 小程序
|
12天前
|
监控 架构师 项目管理
项目管理架构师的角色与职责:构建高效项目交付框架
【8月更文第7天】在当今快速变化的商业环境中,组织需要灵活高效的项目交付机制来应对不断出现的新挑战。项目管理架构师(Project Management Architect, PMA)作为一种新兴的角色,在确保项目成功交付方面扮演着至关重要的角色。本文将探讨PMA的核心职责,以及他们如何通过设计和实施项目管理流程来提高项目的可扩展性和适应性,并通过有效的项目治理来提升团队的整体表现。
29 0
|
1月前
|
设计模式 消息中间件 监控
如何在Java项目中实现可扩展性架构
如何在Java项目中实现可扩展性架构
|
1月前
|
消息中间件 监控 Java
在Java项目中实现事件驱动架构
在Java项目中实现事件驱动架构
|
1月前
|
负载均衡 Java 开发者
如何在Spring Boot项目中实现微服务架构?
如何在Spring Boot项目中实现微服务架构?
|
1月前
|
存储 缓存 运维
Lustre架构介绍的阅读笔记-HSM
HSM(Hierarchical Storage Management)是数据分级存储管理,根据数据生命周期、访问特性和设备成本,自动在CPU寄存器、缓存、主存、SSD、HDD、光盘、磁带库等不同存储层级间迁移数据。数据热度分为热、温、冷、冰,对应不同成本、性能和容量。迁移策略可基于人工判断或系统自动计算,并确保业务I/O不受影响、数据一致性。访问频率增加时,数据可反向迁移至更高层级。
|
21天前
|
Java Maven 开发者
gradle项目对比maven项目的目录架构以及对gradle wrapper的理解
gradle项目对比maven项目的目录架构以及对gradle wrapper的理解
25 0
|
1月前
|
存储 消息中间件 缓存
Lustre架构介绍的阅读笔记-NFS兼容性
Lustre是分布式NFS系统,融合了分布式系统和NFS特性。它支持线性扩展容量和性能,提供POSIX语义,隐藏复杂存储细节。关键技术涉及分布式计算、缓存、锁、事务、通信(RPC、消息队列、同步/异步模式)、选举、任务调度、健康检查、负载均衡、集群管理和QoS。数据一致性、复制(副本、EC)、热点管理及多种上层协议(如NFS、S3)也是重点。分布式存储通过扩容提升读写带宽和IOPS。