使用EventBus进行数据传递解析

EventBus是Android端的一个订阅/发布的消息总线,用在应用程序内,组件之间,线程之间的通信,并且由于事件可以是任意类型的对象,所以使用起来更加的方便快捷。
角色:
Event:就是事件啦
Subscriber:订阅者,接收特定事件的对象,主要通过onEventXXX()回调接口接收
Publisher:发布者,post事件,通知订阅者
以上都是官方介绍,比我说的要简洁易懂的多,我就不赘叙了,就知道EventBus主要是能更简洁快速的实现应用内通信就行了。

现在,就说说我在工作中是怎么运用EventBus的吧,可能会给大家使用上增加一些灵感

先模仿一下EventBus在网络请求中的应用

EventBus不管实在Activity中还是在Fragment中,都需要进行注册和取消注册,这点跟广播是一致的

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

分别在onCreate()和onDestory()方法里面。

建议写一个BaseActivity和BaseFragment,在里面分别进行注册和取消注册,我们在使用时只需要继承一下即可,就不需要大量冗余代码。

然后,建立一个数据传递事件,例如BusEvent

/** * 数据传递事件 */
public class BusEvent{
    public enum Type {
        /** * 登陆成功 */
        LOGIN_SUCCESS,
        /** * 登陆失败 */
        LOGIN_FAILURE,
    }

    public Type type;
    public String tag;
    public Object data;

    public DataEvent(Type type, String tag, Object data) {
        this.type = type;
        this.tag = tag;
        this.data = data;
    }

type标志请求类别,tag标志在那个类中的请求,data标志请求数据
在请求数据成功后,可以用EvnetBus进行发送

 EventBus.getDefault().post(new BusEvent(type, tag, data));

然后定义接收

 public void onEventMainThread(BusEvent event) {
        if(event.tag.equals(tag))
        {
            switch(event.type){
                case  LOGIN_SUCCESS:
                //登陆成功处理
                    break;
                case LOGIN_FAILURE:
                 //登陆失败处理
                    break;
            }
        }

    }

很简单吧,这样就可以实现简单的数据传递了

你可能感兴趣的:(android,EventBus,发布,数据传递)