EventBus事件总线框架(发布者/订阅者模式,观察者模式)
一、 android应用内消息传递的方式:
	1. handler方式-----------------不同线程间传递消息。
	2. Interface接口回调方式-------任意两个对象。
	3. Intent进行组件间通信,广播方式。
二、单例比较好的写法:
	    private static volatile EventBus defaultInstance;
	    构造函数应当是private,不应该是public
 public static EventBus getDefault() {
   if (defaultInstance == null) {
     synchronized (EventBus.class) {
       if (defaultInstance == null) {
         defaultInstance = new EventBus();
       }
     }
   }
   return defaultInstance;
 }
双重检查锁(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>内容。
EventBus事件总线框架(发布者/订阅者模式,观察者模式)的更多相关文章
- Android学习系列(43)--使用事件总线框架EventBus和Otto
		
事件总线框架 针对事件提供统一订阅,发布以达到组件间通信的解决方案. 原理 观察者模式. EventBus和Otto 先看EventBus的官方定义: Android optimized event ...
 - C#事件支持发布者/订阅者模式(观察者模式)
		
C#事件支持发布者/订阅者模式,发布者将事件通知给订阅者,而订阅者在事件发生时调用已经注册好的事件处理函数. public delegate void delUpdate(); //委 ...
 - Guava - EventBus(事件总线)
		
Guava在guava-libraries中为我们提供了事件总线EventBus库,它是事件发布订阅模式的实现,让我们能在领域驱动设计(DDD)中以事件的弱引用本质对我们的模块和领域边界很好的解耦设计 ...
 - EventBus(事件总线)
		
EventBus(事件总线) Guava在guava-libraries中为我们提供了事件总线EventBus库,它是事件发布订阅模式的实现,让我们能在领域驱动设计(DDD)中以事件的弱引用本质对我们 ...
 - EventBus事件总线
		
EventBus事件总线的使用-自己实现事件总线 在C#中,我们可以在一个类中定义自己的事件,而其他的类可以订阅该事件,当某些事情发生时,可以通知到该类.这对于桌面应用或者独立的windows服务 ...
 - Otto事件总线框架的使用
		
Otto是一个在Android中的事件总线框架,它是square的一个开源框架,具体介绍点击这里,项目下载点击这里 为什么要使用Otto事件总线: 通常来说在Android中: 1.Activity与 ...
 - vue双向绑定(数据劫持+发布者-订阅者模式)
		
参考文献:https://www.cnblogs.com/libin-1/p/6893712.html 实现mvvm主要包含两个方面,数据变化更新视图,视图变化更新数据. 关键点在于data如何更新v ...
 - 事件总线框架---Otto
		
我们假设这样一种业务场景,现在在做一款及时聊天应用,我们在聊天页面进行收发信息,同时也要实时更新前一页面的聊天记录,这时我们该如何去实现?说说我以前的实现策略,我使用的是广播接收器BroadCastR ...
 - dhroid - eventbus 事件总线
		
你听过onClick 事件,onItemClick 事件,事件总线不一定听过吧, eventbus 事件总线也是一个编程思想,为什么要设计EventBus了,因为他是领域驱动设计中比不可少的模块,它承 ...
 
随机推荐
- GNU Radio: 射频子板
			
本文简要介绍 USRP 配套的子板参数信息. 射频子板WBX-40 性能特点 频率覆盖:50 MHz – 2.2GHz 最大信号处理带宽:40MHz 行为描述 WBX-40提供高宽带收发器,可提供高达 ...
 - Makefile编写 一   *****
			
编译:把高级语言书写的代码转换为机器可识别的机器指令.编译高级语言后生成的指令虽然可被机器识别,但是还不能被执行.编译时,编译器检查高级语言的语法.函数与变量的声明是否正确.只有所有的语法正确.相关变 ...
 - 今日头条、抖音、西瓜、火山、微视、陌陌等自媒体平台小视频批量下载工具v1.1.0(视频搬运福利)
			
前言 目前各大自媒体平台爆火,网络流量暴涨,各大自媒体平台的小视频为广大个广告主带来了如泉涌般的的视频流量,更给广大的自媒体小编带来了丰厚的利益回报,想要创做更多的自媒体内容着实不易,下面给广大的小视 ...
 - Bootstrap-Plugin:附加导航(Affix)插件
			
ylbtech-Bootstrap-Plugin:附加导航(Affix)插件 1.返回顶部 1. Bootstrap 附加导航(Affix)插件 附加导航(Affix)插件允许某个 <div&g ...
 - 学习笔记之C# 教程 | 菜鸟教程
			
C# 教程 | 菜鸟教程 http://www.runoob.com/csharp/csharp-tutorial.html 菜鸟教程在线编辑器 http://www.runoob.com/try/r ...
 - 【HDU】4352 XHXJ's LIS(数位dp+状压)
			
题目 传送门:QWQ 分析 数位dp 状压一下现在的$ O(nlogn) $的$ LIS $的二分数组 数据小,所以更新时直接暴力不用二分了. 代码 #include <bits/stdc++. ...
 - Quest.Central.for.DB2.v5.0.2.4下载地址
			
http://pan.baidu.com/s/1h5vgl 激活码 2-95710-02204-91891-68750yhason
 - 有了 itchat, python 调用微信个人号从未如此简单(新增 py3 支持)
			
itchat 是一个开源的微信个人号接口. 近期完成了 py3 与文档的完善,欢迎各位使用与测试. 使用不到三十行的代码,你就可以完成一个能够处理所有信息的微信机器人. 当然,该 api 的使用远不止 ...
 - Linux内核优化(未注释)
			
Nginx代理服务内核优化 # Kernel sysctl configuration file for Red Hat Linux # # For binary values, 0 is disab ...
 - JDK8时间格式转换
			
来源:https://blog.csdn.net/zhangzijiejiayou/article/details/76597329 LocalDateTime 本地日期时间 LocalDateTim ...