invoking-message是一款Android平台消息总线框架,基于LiveEventBus实现。它颠覆了传统消息总线定义和使用的方式,通过链式的方法调用发送和接收消息,使用更简单。
- 基于LiveEventBus实现,具有LiveEventBus所有功能。
- 通过链式的方法调用发送和接收消息,使用起来更加简单。
- 只能使用预定义的消息,加强约束。
- 定义的消息更容易查找和溯源。
- 适合在组件化的架构中用来实现组件间的通信。
所以,无论你之前使用哪种消息总线框架,如果你曾经遇到如下问题,请尝试invoking-message,它能解决你的痛点:
- 随意定义消息,不易管理,一个消息想知道谁是发送者,谁又是观察者,只能通过Ctrl+F,非常麻烦,如果消息分布在不同组件中,查找起来就更加麻烦了。
- 消息定义越多,就越不清楚到底有哪些消息,写代码的时候是不是经常问自己:“哎,我该发送个什么消息来着?”。
- 编写代码的时候一不小心把消息写错了,又不会报错,怎么收不到消息了,查找问题好麻烦。
@InvokingEventsDefine()
public class DemoEvents {
public static final String EVENT1 = "event1";
@EventType(String.class)
public static final String EVENT2 = "event2";
@EventType(TestEventBean.class)
public static final String EVENT3 = "event3";
}
关键点:
- 定义消息的类需加上注解@InvokingEventsDefine
- 消息的名字需要定义成public static final String类型
- 用注解@EventType定义消息体的类型,如不使用,默认为Object,@EventType支持自定义类型
定义了消息的Module,需要在build.gradle中使用compiler处理注解:
annotationProcessor 'com.jeremyliao:invoking-message-compiler:1.1.0'
关键点:
- 注解处理器会生成以“EventsDefineAs”开头的接口文件
- 编写代码的时候,如果记不得定义了哪些消息,请查找以“EventsDefineAs”开头的类
InvokingMessage
.get()
.as(EventsDefineAsDemoEvents.class)
.EVENT2()
.observe(this, new Observer<String>() {
@Override
public void onChanged(@Nullable String s) {
Toast.makeText(MainActivity.this, s, Toast.LENGTH_LONG).show();
}
});
关键点:
- 定义subscribers的整个过程为链式调用
- 支持更多定义subscribers的方式,与LiveEventBus一致
InvokingMessage
.get()
.as(EventsDefineAsDemoEvents.class)
.EVENT2()
.post("test");
关键点:
- 发送消息的整个过程为链式调用
- 支持更多发送消息的方式,与LiveEventBus一致
Via Gradle:
implementation 'com.jeremyliao:invoking-message-core:1.1.0'
-dontwarn com.jeremyliao.im.**
-keep class com.jeremyliao.im.** { *; }
-keep class com.jeremyliao.liveeventbus.** { *; }