美文网首页
六、EventBus的使用

六、EventBus的使用

作者: 贵翼 | 来源:发表于2019-02-05 22:05 被阅读0次

    一、EventBus简介

    EventBus是一个Android端优化的publish/subscribe消息总线,简化了应用程序内各组件间、组件与后台线程间的通信。比如请求网络,等网络返回时通过Handler或Broadcast通知UI,两个Fragment之间需要通过Listener通信,这些需求都可以通过EventBus实现。

    二、下载地址

    https://github.com/greenrobot/EventBus
    Jar包链接:https://pan.baidu.com/s/1TK9QZl0MdBLVb7449kt1YQ
    提取码:n274

    三、使用步骤

    1.添加jar包到libs文件夹下

    2.注册

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    
        EventBus.getDefault().register(this);
    
    }
    

    3.解注册

    @Override
    protected void onDestroy() {
        super.onDestroy();
        EventBus.getDefault().unregister(this);
    }
    

    4.构造发送消息类

    public class MessageEvent {
        public String name;
        public String password;
    
        public MessageEvent(String name, String password) {
            this.name = name;
            this.password = password;
        }
    }
    

    5.发布消息

    EventBus.getDefault().post(new MessageEvent("dahaige","123456"));
    

    6.接收消息
    ThreadMode.MAIN 表示这个方法在主线程中执行
    ThreadMode.BACKGROUND 表示该方法在后台执行,不能并发处理
    ThreadMode.ASYNC 也表示在后台执行,可以异步并发处理
    ThreadMode.POSTING 表示该方法和消息发送方在同一个线程中执行

    @Subscribe(threadMode = ThreadMode.MAIN)
        public void messageEventBus(MessageEvent event){
            tv_result.setText("name:"+event.name+" passwrod:"+event.password);
        }
    

    四、粘性事件

    之前说的使用方法, 都是需要先注册(register), 再post,才能接受到事件;
    如果你使用postSticky发送事件, 那么可以不需要先注册, 也能接受到事件.

    1)构造发送信息类

    public class StickyEvent {
        public String msg;
    
        public StickyEvent(String msg) {
            this.msg = msg;
        }
    }
    

    2)发布消息

    EventBus.getDefault().postSticky(new StickyEvent("我是粘性事件"));
    

    3)接收消息

        //注意,和之前的方法一样,只是多了一个 sticky = true 的属性.
        @Subscribe(threadMode = ThreadMode.MAIN, sticky = true)
        public void onEvent(StickyEvent event){
            tv_c_result.setText(event.msg);
        }
    

    4)注册

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

    5)解注册

     @Override
        protected void onDestroy() {
            super.onDestroy();
    
            EventBus.getDefault().removeAllStickyEvents();
            EventBus.getDefault().unregister(EventBusSendActivity.class);
        }
    
    

    相关文章

      网友评论

          本文标题:六、EventBus的使用

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