美文网首页
EventBus 从入门到精通详解

EventBus 从入门到精通详解

作者: 炼_1086 | 来源:发表于2019-06-29 12:46 被阅读0次

    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.发送粘性事件

    相关文章

      网友评论

          本文标题:EventBus 从入门到精通详解

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