zoukankan      html  css  js  c++  java
  • EventBus 知识点总结

    随着RxJava 的火爆,RxBus 相对来说比较配套,我不知道还会不会用eventBus 但是谁知道呢,总结一下备忘还是不错的选择。

    http://greenrobot.org/eventbus/

      EventBus-Android的发布 - 订阅

    使用eventBus的好处

    EventBus:活动为Android

    EventBus是使用Android的开放源码库发布/订阅为松耦合模式。EventBus使得脱钩类与代码,只需几行中央通信-简化了代码,消除依赖关系,并加快应用开发。
    EventBus-Android的发布 - 订阅

    使用你的好处EventBus:这...

    • 简化组件之间的通信
    • 解耦事件发送者和接收者
    • 与活动,片段,和后台线程表现良好
    • 避免了复杂且容易出错的依赖关系和生命周期问题
    • 快; 专为高性能而优化
    • 很小(<50K JAR)
    • 在实践中被证明与应用程序安装100,000,000+
    • 拥有先进的功能,如交付线程,用户优先级等。

    添加:

     compile 'org.greenrobot:eventbus:3.0.0'

    第1步:定义事件

    事件是POJO(简单Java对象)没有任何特殊要求。

    public class MessageEvent {
        public final String message;
        public MessageEvent(String message) {
            this.message = message;
        }
    }

    2.Prepare subscribers(准备订阅)

    // This method will be called when a MessageEvent is posted (in the UI thread for Toast)
    @Subscribe(threadMode = ThreadMode.MAIN)
    public void onMessageEvent(MessageEvent event) {
        Toast.makeText(getActivity(), event.message, Toast.LENGTH_SHORT).show();
    }
     
    // This method will be called when a SomeOtherEvent is posted
    @Subscribe
    public void handleSomethingElse(SomeOtherEvent event) {
        doSomethingWith(event);
    }

    //定义回调函数,相当于观察者模式中的on***Listener函数,在EventBus中可以定义四种类型的回调函数:

    //onEvent 它和ThreadModel中的PostThread对应,这个也是默认的类型,当使用这种类型时,回调函数和发起事件的函数会在同一个线程中执行

    //onEventMainThread,当使用这种类型时,回调函数会在主线程中执行,这个在Android中非常有用,因为在Android中禁止在子线程中修改UI

    //onEventBackgroundThread,当使用这种类型时,如果事件发起函数在主线程中执行,那么回调函数另启动一个子线程,如果事件发起函数在子线程执行,那么回调函数就在这个子线程执行。

    //onEventBusAsync,当使用这种类型时,不管事件发起函数在哪里执行,都会另起一个线程去执行回调。

    3.注册事件 反注册事件

    @Override
    public void onStart() {
        super.onStart();
        EventBus.getDefault().register(this);
    }
     
    @Override
    public void onStop() {
        EventBus.getDefault().unregister(this);
        super.onStop();
    }

    4.发送事件

    EventBus.getDefault().post(new MessageEvent("Hello everyone!"));
     
  • 相关阅读:
    SpringCloud Config 配置中心
    MySQL 8.0版本安装后,安装目录下找不到my.ini文件
    MySQL 跨库JOIN
    SpringCloud Ribbon 自定义负载均衡算法
    idea部署tomcat,日志打印显示乱码问题解决
    centos7配置回环网卡地址
    INV*物料接收子库存更新
    AP*供应商更新
    AR*Hz_Parties 客户表更新
    MyBatis-Plus自动生成代码
  • 原文地址:https://www.cnblogs.com/ClodThunder/p/5914873.html
Copyright © 2011-2022 走看看