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>内容。

  • 相关阅读:
    java线程实现和集合类综合问题
    软件体系结构风格总结
    java如何实现对象的克隆
    24小时实现盲打(程序员快速入门)
    测试面向对象软件时,设计集成测试用例的方法
    对白盒测试的一些理解
    对于工程建模需要画的图的分析及体会
    在软件开发的早期阶段为什么要进行可行性研究?应该从哪些方面研究目标系统的可行性?
    谭静第一周任务
    陈林艳第一周任务
  • 原文地址:https://www.cnblogs.com/linghu-java/p/8971053.html
Copyright © 2011-2022 走看看