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 工具类即可



相关文章
|
1月前
|
前端开发 测试技术 数据处理
Kotlin教程笔记 - MVP与MVVM架构设计的对比
Kotlin教程笔记 - MVP与MVVM架构设计的对比
49 4
|
1月前
|
前端开发 JavaScript 测试技术
Kotlin教程笔记 - 适合构建中大型项目的架构模式全面对比
Kotlin教程笔记 - 适合构建中大型项目的架构模式全面对比
31 3
|
1月前
|
存储 前端开发 Java
Kotlin教程笔记 - MVVM架构怎样避免内存泄漏
Kotlin教程笔记 - MVVM架构怎样避免内存泄漏
26 2
|
28天前
|
监控 前端开发 数据可视化
3D架构图软件 iCraft Editor 正式发布 @icraft/player-react 前端组件, 轻松嵌入3D架构图到您的项目,实现数字孪生
@icraft/player-react 是 iCraft Editor 推出的 React 组件库,旨在简化3D数字孪生场景的前端集成。它支持零配置快速接入、自定义插件、丰富的事件和方法、动画控制及实时数据接入,帮助开发者轻松实现3D场景与React项目的无缝融合。
101 8
3D架构图软件 iCraft Editor 正式发布 @icraft/player-react 前端组件, 轻松嵌入3D架构图到您的项目,实现数字孪生
|
1月前
|
XML 前端开发 Android开发
Kotlin教程笔记(80) - MVVM架构设计
Kotlin教程笔记(80) - MVVM架构设计
|
1月前
|
前端开发 JavaScript 测试技术
android做中大型项目完美的架构模式是什么?是MVVM吗?如果不是,是什么?
在 Android 开发中,选择合适的架构模式对于构建中大型项目至关重要。常见的架构模式有 MVVM、MVP、MVI、Clean Architecture 和 Flux/Redux。每种模式都有其优缺点和适用场景,例如 MVVM 适用于复杂 UI 状态和频繁更新,而 Clean Architecture 适合大型项目和多平台开发。选择合适的架构应考虑项目需求、团队熟悉度和可维护性。
53 6
|
1月前
|
存储 前端开发 数据可视化
在实际项目中,如何选择使用 Flux 架构或传统的 MVC 架构
在实际项目中选择使用Flux架构或传统MVC架构时,需考虑项目复杂度、团队熟悉度和性能需求。Flux适合大型、高并发应用,MVC则适用于中小型、逻辑简单的项目。
|
25天前
|
XML 前端开发 Android开发
Kotlin教程笔记(80) - MVVM架构设计
Kotlin教程笔记(80) - MVVM架构设计
|
2月前
|
前端开发 JavaScript 测试技术
Android适合构建中大型项目的架构模式全面对比
Android适合构建中大型项目的架构模式全面对比
51 2
|
2月前
|
XML 前端开发 Android开发
Kotlin教程笔记(80) - MVVM架构设计
Kotlin教程笔记(80) - MVVM架构设计
30 1