美文网首页技术
EventBus使用

EventBus使用

作者: mrwrong1988 | 来源:发表于2016-01-18 17:07 被阅读270次

    https://github.com/greenrobot/EventBus/blob/master/HOWTO.md

    1:定义事件

    事件类就是是简单的java类(POJO (plain old Java object) ),没有任何要求

    public class MessageEvent {
        public final String message;
    
        public MessageEvent(String message) {
            this.message = message;
        }
    }
    

    2:准备订阅者

    订阅者需要实现onEvent来处理事件,需要在合适的地方注册和注销(如onStart,onStop中,官方文档例子中)

    @Override
    public void onStart() {
        super.onStart();
        EventBus.getDefault().register(this);
    }
    
    @Override
    public void onStop() {
        EventBus.getDefault().unregister(this);
        super.onStop();
    }
    
    // This method will be called when a MessageEvent is posted
    public void onEvent(MessageEvent event){
        Toast.makeText(getActivity(), event.message, Toast.LENGTH_SHORT).show();
    }
    
    // This method will be called when a SomeOtherEvent is posted
    public void onEvent(SomeOtherEvent event){
        doSomethingWith(event);
    }
    

    3:发送事件

    EventBus.getDefault().post(new MessageEvent("Hello everyone!"));
    

    4:onEvent的ThreadModes

    1. onEvent, 在post所在线程响应(default).
    2. onEventMainThread, 在UI线程响应.
    3. onEventBackgroundThread 如果post不在UI线程则在post所在线程响应,如果post在主线程,则EventBus使用一个单独的线程处理(该事件的都会在这个线程处理,因此耗时操作会阻塞线程).
    4. onEventAsync 独立于post所在线程和UI线程,适合做一些耗时操作(network access),但要注意数量,EventBus使用的线程池实现.

    注5:册优先级

    the default priority is 0,priority 值越大,越先调用

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

    6:取消事件发送

    public void onEvent(MessageEvent event){
        // Process the event 
        ...
    
        EventBus.getDefault().cancelEventDelivery(event) ;
    }
    

    7:Sticky Events

    EventBus实现了保存最近的事件实例

    EventBus.getDefault().postSticky(new MessageEvent("Hello everyone!")); // 发送
    EventBus.getDefault().registerSticky(this); // 注册
    EventBus.getDefault().unregister(this); // 注销
    // 获取最新的事件
    EventBus.getDefault().getStickyEvent(Class<?> eventType)
    

    相关文章

      网友评论

        本文标题:EventBus使用

        本文链接:https://www.haomeiwen.com/subject/mzekkttx.html