美文网首页
EventBus 简单使用笔记

EventBus 简单使用笔记

作者: lisheny | 来源:发表于2017-08-24 15:16 被阅读0次

    EventBus 通过发布/订阅的方式进行消息传递。主要功能是替代 Intent、Handler、BroadCast 在 Fragment、Activity、Service、线程之间传递消息。

    使用方法:(跟广播的使用有点相似)

    • 1.引入EventBus:
     compile 'org.greenrobot:eventbus:3.0.0'
    
    • 2.注册与注销,在 Activity 后者 Fragment 中
        @Override
        protected void onStart() {
            super.onStart();
            EventBus.getDefault().register(this);
        }
    
        @Override
        protected void onStop() {
            super.onStop();
            EventBus.getDefault().unregister(this);
        }
    
    • 3.定义事件消息类
    public class MessageEvent {
        private String name;
        private String sex;
    
        public String getName() {
            return name;
        }
    
        public String getSex() {
            return sex;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    
        public void setSex(String sex) {
            this.sex = sex;
        }
    
        public MessageEvent(){
    
        }
    
        public MessageEvent(String name, String sex) {
            this.name = name;
            this.sex = sex;
        }
    }
    
    • 4.发送消息
       MessageEvent messageEvent = new MessageEvent();
       messageEvent.setName("lisheny");
       messageEvent.setSex("boy");
       EventBus.getDefault().post(messageEvent);
    
    • 5.接收消息处理,指定 threadMode 的模式
        @Subscribe(threadMode = ThreadMode.MAIN)
        public void onMessageEvent(final MessageEvent event){
            textView.setText(event.getName()+","+event.getSex());
        }
    
    • 6.proguard 混淆处理:
    -keepattributes *Annotation*
    -keepclassmembers class ** {
       @org.greenrobot.eventbus.Subscribe <methods>;
    }
    -keep enum org.greenrobot.eventbus.ThreadMode { *; }
    
    # Only required if you use AsyncExecutor
    -keepclassmembers class * extends org.greenrobot.eventbus.util.ThrowableFailureEvent {
       <init>(java.lang.Throwable);
    }
    
    特别的:四种 threadMode:
    • ThreadMode.POSTING ,默认模式,在发布者所在的线程中调用;
    • ThreadMode.MAIN ,主线程中调用,不宜耗时操作;
    • ThreadMode.BACKGROUND ,后台进程调用,不宜耗时操作,避免阻塞进程。
    • ThreadMode.ASYNC ,单独的线程中调用,耗时操作用它。

    官网:https://github.com/greenrobot/EventBus
    上面代码Demo:https://github.com/lisheny/EventBusTest

    相关文章

      网友评论

          本文标题:EventBus 简单使用笔记

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