开源框架 EventBus 简单使用

EventBus 项目地址:https://github.com/greenrobot/EventBus#comparison-with-squares-otto

简介

      EventBus 是基于推送/订阅模式的事件总线开源项目,使用它可以代替传统的Handler,Intent,广播等实现不同组件之间数据传递。例如Activity之间传递数据,Activity与Fragment之间传递数据。还有一点是对于不同线程的处理是比较特别的,下面你会看到这一点。

官方提供的模型图:

开源框架 EventBus 简单使用_第1张图片

添加到项目里

Gradle:
compile 'org.greenrobot:eventbus:3.0.0'

Maven:

    org.greenrobot
    eventbus
    3.0.0

或者下载源码导入到工程

使用步骤3步

(1)自定义事件类,用作信息传递的载体。

public class TaskEvent {
    private static final String Tag = "TaskEvent";
    private TomatoTask tomatoTask;

    public TaskEvent(TomatoTask tomatoTask){
        this.tomatoTask = tomatoTask;
    }

    public TomatoTask getTomatoTask(){
        return tomatoTask;
    }
}

(2)订阅

简单的获取方式,获取共享实例对象之后订阅:

EventBus.getDefault().register(this);

也可以设置订阅的优先级,优先级高的最先接收到事件,默认为0。不同的Thread中优先级没有意义。

int priority = 1;
EventBus.getDefault().register(this, priority);

在订阅的类中添加接收事件的方法:

@Subscribe

onEvent(Event event)

如果使用onEvent作为订阅函数,那么该事件在哪个线程发布出来的,onEvent就会在这个线程中运行,也就是说发布事件和接收事件线程在同一个线程。使用这个方法时,在onEvent方法中不能执行耗时操作,如果执行耗时操作容易导致事件分发延迟。

@Subscribe

onEventMainThread(Event event)

如果使用onEventMainThread作为订阅函数,那么不论事件是在哪个线程中发布出来的,onEventMainThread都会在UI线程中执行,接收事件就会在UI线程中运行,这个在Android中是非常有用的,因为在Android中只能在UI线程中跟新UI,所以在onEvnetMainThread方法中是不能执行耗时操作的。

@Subscribe

onEventBackground(Event event)

如果使用onEventBackgrond作为订阅函数,那么如果事件是在UI线程中发布出来的,那么onEventBackground就会在子线程中运行,如果事件本来就是子线程中发布出来的,那么onEventBackground函数直接在该子线程中执行。

@Subscribe

onEventAsync(Event event)

使用这个函数作为订阅函数,那么无论事件在哪个线程发布,都会创建新的子线程在执行onEventAsync.

注意:方法顶部要添加注解@Subscribe,不然会报错。

(3)事件发布

EventBus.getDefault().post(new TaskEvent(tomatoTasks.get(position)));

还有一种是sticky 事件,意思是缓存事件,当事件发布了之后如果有订阅者订阅了该事件就可以接收。区别于上面的先订阅再发布事件。

相应的代码写成:

发布:EventBus.getDefault().postSticky(new TaskEvent(tomatoTasks.get(position)));

订阅:EventBus.getDefault().registerSticky(this);


混淆配置:

-keepclassmembers class ** {
    public void onEvent*(**);
}

# Only required if you use AsyncExecutor
-keepclassmembers class * extends de.greenrobot.event.util.ThrowableFailureEvent {
    (java.lang.Throwable);
}


你可能感兴趣的:(Android开源框架)