EventBus

经常使用事件消息传递多线程

① 一个实现了监听器接口的类,必须把它自身注册到它想要监听的类中去post

② 使用广播,内部的实现都须要IPC,从传递效率上来讲,可能并不太适合上层的组件间的通讯优化

③ Activity间的消息传递时经过startActivityForResult 和onActivityResult,会产生较多的状态或逻辑判断,并且Intent或Bundle传值还得检测类型,容易发生错误this

 

什么是EventBus?spa

      EventBus是一款针对Android优化的发布/订阅事件总线,主要功能是替代Intent,Handler,Broadcast在Fragment,Activity,Service,线程之间传递消息,优势是开销小,代码更优雅,以及将发送者和接收者解耦,他能够让俩个组件相互通讯,可是它们之间并不相互知晓线程

 

事件总线发布EventBus与otto的区别?接口

什么是事件总线管理:队列

将事件放在队列里面,用于管理和分发事件

保证应用的各个部分之间高效的通讯及数据,事件分发get

模块间解耦

 

 

Eventbus包含四个部分:

    发布者(publisher),订阅者(subscriber),事件,总线

    使用时须要先订阅注册,而后向订阅者发布消息便可

    订阅者能够订阅多个事件,发布者能够发布任何事件,发布者同时也能够是订阅者

    步骤:订阅,注册,发布,取消注册

 

基本用法:

注册: 

            ① EventBus.getDefault().register(this);

            ②  EventBus.getDefault().register(new Event());

            ③  EventBus.getDefault().register(this,methodName,Event.class);

            三个参数:消息订阅者(接收者),接收方法名,事件类

取消注册:

                ① EventBus.getDefault().unregister(this);

                ② EventBus.getDefault().unregister(new Event());

订阅处理数据:

        ① onEventMainThread   运行在主线程中,能够在这直接操做UI

        ② onEvent   与发布者在同一个线程

        ③ onEventPostThead   发布者发送数据的线程与接收者接收的线程是一个

        ④ onEventAsync  执行在一个新的线程,适用多个多线程处理,内部有线程池管理,在独立线程中运行

        ⑤ onEventBackgroundThread   执行在子线程,若是发布者在子线程则直接执行,若是不是在子线程那么建立一个新的线程,在后台线程中运行

发布:EventBus.getDefault().post(new Event(meg));

相关文章
相关标签/搜索