Apollo 
EventBus by RxJava
- 基于RxJava
- 基于编译时注解技术,编译时生æˆ?绑定代ç ?,é?žå??射,性能0æ?Ÿè€—
- 支�进程间通信
- 支�@Tag注解,支�多�Tag
- 支�@Sticky注解
- 支�@Take注解,接收指定次数事件
- 支�@SubscribeOn注解,指定订阅线程
- 支�@ObserveOn注解,指定观察线程
- 支æŒ?@Backpressure注解,支æŒ?3ç§?背压ç–ç•¥(BackpressureStrategy.BUFFER,BackpressureStrategy.DROP,BackpressureStrategy.LATEST)
- 支�apollo core �注解�使用
Todo
- �写demo
- 完整的�元测试(已完�30%,�unittest module)
开始
用3分钟时间快速集�Apollo
集�
使用jitpack第三方�赖库
allProjects {
repositories {
maven { url "https://www.jitpack.io" }
}
}在项目所在build.graldeæ·»åŠ ä¾?èµ–
dependencies {
//Apollo�赖RxAndroid2,请使用最新的版本
implementation "io.reactivex.rxjava2:rxandroid:2.0.1"
//Apolloçš„æ ¸å¿ƒåº“
implementation "com.github.lsxiao.Apollo:core:1.0.2"
//IPC,如�需��以��赖
implementation "com.github.lsxiao.Apollo:ipc:1.0.2"
//Apollo的编译时注解处�器
annotationProcessor "com.github.lsxiao.Apollo:processor:1.0.2"
//å¦‚æžœä½ ä½¿ç”¨çš„æ˜¯kotlin,请使用kapt
kapt "com.github.lsxiao.Apollo:processor:1.0.2"
}使用
�始化
ApolloBinderGeneratorImpl在编译时生�。
Apollo.init(AndroidSchedulers.mainThread(), this);绑定/解绑
为了é?¿å…?å†…å˜æ³„露,应在组件生命周期内绑定和解绑。
public abstract class BaseActivity extends Activity {
private ApolloBinder mBinder;
@Override
protected void onCreate(Bundle savedInstanceState) {
...
mBinder = Apollo.bind(this);
}
@Override
protected void onDestroy() {
...
if(mBinder != null){
mBinder.unbind();
}
}
...
}
��
让��更简�
Apollo.emit("event","hello apollo")接收
让接收更自在
@Receive("event")
public void onEvent(String message){
...
}进程间通信(IPC)
默认关é—
Apollo.init(AndroidSchedulers.mainThread(), this,true);
**!!!注æ„?:**由于默认采用kryoåº?列化,所以任何需è¦?åœ¨è¿›ç¨‹é—´ä¼ è¾“çš„æ•°æ?®å¯¹è±¡ï¼Œè‡ªå·±åŒ…括其内部的æˆ?å‘˜å¯¹è±¡éƒ½å¿…é¡»æœ‰ä¸€ä¸ªé»˜è®¤çš„æ— å?‚æž„é€ å‡½æ•°ï¼?ï¼?ï¼?
高级用法
注解
注�!!!,被注解的函数一定得是public修饰,且@Receive是必须注解,其余为�选注解。
| 注解 | å?‚æ•° | æ??è¿° | 默认值 |
|---|---|---|---|
| @Receive | 接收一个å—符串tag数组,或者å?•个å—符串tag | æ— | |
| @Sticky | remove | 接收�是�清除stikcy事件 | ture |
| @SubscribeOn | 订阅所在线程 | SchedulerProvider.Tag.IO | |
| @ObserveOn | 观察所在线程 | SchedulerProvider.Tag.MAIN | |
| @Take | 接收多少次事件,intåž‹å?‚æ•° | æ— | |
| @Backpressure | 背压ç–ç•¥(BackpressureStrategy.BUFFER,BackpressureStrategy.DROP,BackpressureStrategy.LATEST) | æ— |
更多方法
boolean sticky = true;
//�有tag
Apollo.emit("tag");
//tag和数�实体
Apollo.emit("tag","event");
//stikcy(�有被@Sticky注解的函数�能收到sticky事件)
Apollo.emit("tag","event",stikcy)
//�有tag的stikcy调用
Apollo.emit("tag",sticky)注æ„?,在emit一个booleanå?˜é‡?的时候,æ£ç¡®å†™æ³•:
Apollo.emit("tag",true,sticky)
错误写法,è¿™æ ·ç›´æŽ¥å°±å?‘é€?了一个ä¸?带å?‚æ•°çš„sticky事件:
Apollo.emit("tag",true)
自定义Serializer
Apollo默认采用kryoæ?¥åº?列化IPCæ•°æ?®å¯¹è±¡ï¼Œä½ å?¯ä»¥æ??供一个Serializeræ?¥ä¿®æ”¹é»˜è®¤çš„实现。
Apollo.serializer(new Serializable() {
@NotNull
@Override
public byte[] serialize(@NotNull Object obj) {
...
}
@Override
public <T> T deserialize(@NotNull byte[] data, @NotNull Class<T> clazz) {
...
}
});æ··æ·†
-dontwarn com.esotericsoftware.kryo.**
-dontwarn org.objenesis.instantiator.**
-dontwarn org.codehaus.**
-dontwarn java.nio.**
-dontwarn java.lang.invoke.**
-keep class com.lsxiao.apollo.generate.** { *; }
测试
å…¨é?¢è€Œå®Œå–„的测试是开æº?库质é‡?çš„ä¿?è¯?,目å‰?测试用例æ£åœ¨ä¸?æ–完善ä¸:)
core module
KryoSerializeTest
unit test module
unittest
构建于ReactiveX之上
- RxJava2 - Reactive Extensions for the JVM
- RxAndroid2 - Reactive Extensions for Android
版本
我们使用 è¯ä¹‰åŒ–版本控制规范 作为版本管ç?†ï¼Œæœ‰å…³å?¯ç”¨çš„版本,请å?‚é˜…æ¤ æ ‡ç¾åˆ—表。
作者
- lsxiao - lsxiao
更多 贡献者 请�考这个项目的列表。
开�许�
Apache License Version 2.0