• 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!"));
     
  • 相关阅读:
    主流的浏览器分别是什么内核?
    css的基本语句构成是什么?
    如何居中一个浮动元素?
    你如何管理CSS文件、JS与图片?
    、在ie6,ie7中元素高度超出自己设置高度。原因是IE8以前的浏览器中会给元素设置默认的行高的高度导致的。
    前端页面有哪三层构成,分别是什么?作用是什么?
    两个对象的 hashCode() 相同,则 equals() 也一定为 true,对吗?
    == 和 equals 的区别是什么?
    JDK 和 JRE 有什么区别?
    2020.10.19
  • 原文地址:https://www.cnblogs.com/ClodThunder/p/5914873.html
Copyright © 2020-2023  润新知