EvenBus的使用,(详解)

1.什么是evenBus?
evenBus是一款针对 android 优化的发布/订阅事件总线。主要功能是代替Intent handler Broacaset 在fragement activity
service线程之间的传递消息,优点是开销小,代码更优雅,以及将发送者和接收者解耦.
2.基本的使用:
1,自定义一个类,可以是空类;
2.在要接收消息的页面注册
3.发送消息
4.接收消息的页面实现(共有四个函数,各功能不同)
5.解除注册
先给大家看个例子:
当击btn_try按钮的时候,跳到第二个Activity,当点击第二个activity上面的First Event按钮的时候向第一个Activity发送消息,当第一个Activity收到消息后,一方面将消息Toast显示,一方面放入textView中显示。
1.简介
EvenBus是一个android端优化的消息总线,简化了应用程序内各组件,组件与后台线程间的通信,比如请求网络,等网络返回时通过Handler或者BroadCast通知UI,两个Fragement之间需要通过listener通信,这些需求都可以通过Evenbus实现;
下载地址: https://github.com/greenrobot/EventBus
3,使用步骤:
1)添加依赖
2)注册EvenBus.getDefault().register(this)
3)解除注册 EvenBus.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)发布消息
EvenBus.getDefault().post(new MessageEvent("dahaige","123456"));

6)接收消息
@Subscribe(threadMode = ThreadMode.MAIN)
    public void messageEventBus(MessageEvent event){
        tv_result.setText("name:"+event.name+" passwrod:"+event.password);
    }
他有四种方式:
ThreadMode.MAIN 表示这个方法在主线程中执行
ThreadMode.BACKGROUND 表示该方法在后台执行,不能并发处理
ThreadMode.ASYNC 也表示在后台执行,可以异步并发处理。
ThreadMode.POSTING 表示该方法和消息发送方在同一个线程中执行

3.粘性事件
之前说的使用方法;都是需要先注册,在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)解除注册消息
EventBus.getDefault().removeAllStickyEvents();
EventBus.getDefault().unregister(CActivity.class);

你可能感兴趣的:(android端)