zoukankan      html  css  js  c++  java
  • EventBus事件总线框架(发布者/订阅者模式,观察者模式)

    一、 android应用内消息传递的方式:
    1. handler方式-----------------不同线程间传递消息。
    2. Interface接口回调方式-------任意两个对象。
    3. Intent进行组件间通信,广播方式。


    二、单例比较好的写法:
    private static volatile EventBus defaultInstance;
    构造函数应当是private,不应该是public

     1 public static EventBus getDefault() {
     2   if (defaultInstance == null) {
     3     synchronized (EventBus.class) {
     4       if (defaultInstance == null) {
     5         defaultInstance = new EventBus();
     6       }
     7     }
     8   }
     9   return defaultInstance;
    10 }


    双重检查锁(DCL)的方式,防止并发的问题,还能极大的提高效率。

    三、EventBus3.0以前
    1. 采用发布者/订阅者模式(观察者模式)设计的简化Activity、Fragment、Service、threads等之间通信的一种事件框架机制,
    让代码简洁,耦合性更低。
    2. 主要核心内容:注册(事件订阅)方法、事件发布方法、反注册(取消订阅)方法。

    3. EventBus通过DCL单例获取一个实例 EventBus.getDefault();

    EventBus一共提供了4种线程模型ThreadModel,分别是PostThread, MainThread, BackgroundThread, Async。
    PostThread --------------默认实现,执行发生在发布事件的同一个线程;
    MainThread --------------执行在UI主线程上;
    BackgroundThread、Async---两个都是通过Executors.newCachedThreadPool()线程池来执行的。


    Event事件,任意类型对象;
    subsciber 事件订阅者,
    publisher 事件发布者,EnentBus.post(Object)

    EnventBus.getDefault()
    EnventBus.getDefault().register()
    EnventBus.getDefault().unregister()
    EnventBus.getDefault().post(Object)
    四、 EventBus3.0版本引入了注解来订阅处理函数
    可以通过运行时注解+反射来获取订阅回调函数
    也可以通过编译时@Subscribe注解生成class文件,编译时生成MyEventBusIndex类,该类中包含了List<SubscriberMethod>内容。

  • 相关阅读:
    005 Python的IDE之Pycharm的使用
    006 Python的IDE之Jupyter的使用
    004 pip的使用
    003 Python解释器源修改
    002 Python解释器安装
    BZOJ 4567 [SCOI2016]背单词 (Trie树、贪心)
    BZOJ 2085 luogu P3502 [POI2010]Hamsters (KMP、Floyd、倍增)
    UOJ #219 BZOJ 4650 luogu P1117 [NOI2016]优秀的拆分 (后缀数组、ST表)
    UOJ #214 [UNR #1]合唱队形 (概率期望计数、DP、Min-Max容斥)
    LOJ #2542 [PKUWC2018]随机游走 (概率期望、组合数学、子集和变换、Min-Max容斥)
  • 原文地址:https://www.cnblogs.com/linghu-java/p/8971053.html
Copyright © 2011-2022 走看看