Skip to content
master
Go to file
Code

Latest commit

 

Git stats

Files

Permalink
Failed to load latest commit information.
Type
Name
Latest commit message
Commit time
 
 
 
 
 
 
ipc
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

README.md

Apollo

EventBus by RxJava

  • 基于RxJava
  • 基于编译时注解技术,编译时生æˆ?绑定代ç ?,é?žå??射,性能0æ?Ÿè€—
  • 支æŒ?进程间通信
  • 支æŒ?@Tag注解,支æŒ?多é‡?Tag
  • 支æŒ?@Sticky注解
  • 支æŒ?@Take注解,接收指定次数事件
  • 支æŒ?@SubscribeOn注解,指定订阅线程
  • 支æŒ?@ObserveOn注解,指定观察线程
  • 支æŒ?@Backpressure注解,支æŒ?3ç§?背压策略(BackpressureStrategy.BUFFER,BackpressureStrategy.DROP,BackpressureStrategy.LATEST)
  • 支æŒ?apollo core é?žæ³¨è§£å¼?使用

English Document

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

版本

我们使用 语义化版本控制规范 作为版本管�,有关�用的版本,请�阅此 标签列表。

作者

更多 贡献者 请�考这个项目的列表。

开�许�

Apache License Version 2.0

You can’t perform that action at this time.