EventBus 从入门到精通详解

2019-06-29  本文已影响0人  炼_1086

1.简介

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

2.下载地址

https://github.com/greenrobot/EventBus

3.使用步骤

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

2.注册 EventBus.getDefault().register(this);

3.解注册 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("发送的消息""));

6.接收消息

*定义的接收方法 (接收方法 自定义名称) 接收的类型的类型 必须和 发送消息的类型一致 (类似与 广播的接收频道  必须一致)

*需要在定义的接收方法上 添加注解 @Subscribe(threadMode = ThreadMode.MAIN)   此处的其它注解方法如下:

ThreadMode.MAIN 表示这个方法在主线程中执行

ThreadMode.BACKGROUND 表示该方法在后台执行,不能并发处理

ThreadMode.ASYNC 表示在后台执行,可以异步并发处理

ThreadMode.POSTING 表示该方法和消息发送方在同一个线程中执行

*以上方法的使用,是需要先注册 register,再 post 才能接收到消息;

如果使用 postSticky发送事件,那么可以不需要注册,也能接收到消息;

4.粘性事件

1.构造发送消息类

 public class MessageEvent{

           public String name;

           public String password;

           public MessageEvent(String name,String password){

            this.name = name;

            this.password = password;

        }

}

2.发送消息  EventBus.getDefault().postSticky(new StickyEvent("该处是粘性事件"));

3.接收消息

*定义的接收方法(接收方法 自定义名称) 接收的类型 必须和 发送消息的类型一致 (类似与 广播的接收频道  必须一致)

*需要在定义的接收方法上 添加注解 @Subscribe(threadMode = ThreadMode.MAIN,sticky = true)

此处的其它注解方法如下:

ThreadMode.MAIN 表示这个方法在主线程中执行

ThreadMode.BACKGROUND 表示该方法在后台执行,不能并发处理

ThreadMode.ASYNC 表示在后台执行,可以异步并发处理

ThreadMode.POSTING 表示该方法和消息发送方在同一个线程中执行

4.注册  EventBus.getDefault().register(MainActivity.this);

5.解注册  

*该方法在 onDestory() 中调用

EventBus.getDefault().removeAllStickyEvents();

EventBus.getDefault().unregister(MainActivity.this);

5.例子

1.主线程发送消息

2.发送粘性事件

上一篇下一篇

猜你喜欢

热点阅读