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了,因为他是领域驱动设计中比不可少的模块,它承 ...
随机推荐
- spring 配置文件中使用properties文件 配置
配置Bean载入properties文件: <bean id="propertyPlaceholderConfigurer" class="org.springfr ...
- WebService返回json格式数据供苹果或者安卓程序调用
1.新建一个WebService. 2. /// <summary> /// DemoToJson 的摘要说明 /// </summary> [WebService(Names ...
- mysql 查询所有父级名称
SELECT T2.id, T2.name FROM ( SELECT @r AS _id, ,,@stop) as stop, (SELECT @r := p_id FROM goods_class ...
- 解决phpexcel保存时文件命中文出现 乱码 (这个真的有用)
Phpexcel导出Excel文件时有两个主要的过程: 1.定义文件名 2.填充Excel数据 这两个过程中可能会出现一些乱码问题,下面我来说一下解决办法: 解决文件名的乱码: 乱码原因:客户使用的中 ...
- Some index files failed to download. They have …… or old ones used instead
问题: 平台:Ubuntu12.04 W: Failed to fetch http://us.archive.ubuntu.com/ubuntu/dists/precise/universe/bin ...
- usaco 2009 12 过路费
最近学的图论,oj上的这道题卡了我一上午,写一下总结. 题目描述: 跟所有人一样,农夫约翰以着宁教我负天下牛,休教天下牛负我(原文:宁我负人,休教人负我)的伟大精神,日日夜夜苦思生财之道.为了发财,他 ...
- Linux下分析某个进程CPU占用率高的原因
Linux下分析某个进程CPU占用率高的原因 通过top命令找出消耗资源高的线程id,利用strace命令查看该线程所有系统调用 1.top 查到占用cpu高的进程pid 2.查看该pid的线程 ...
- python 阿里云短信群发推送
本篇文章是使用Python的Web框架Django提供发送短信接口供前端调用,Python版本2.7 阿里云入驻.申请短信服务.创建应用和模板等步骤请参考:阿里云短信服务入门 1.下载sdk 阿里云短 ...
- 使用正则表达式读取简单的xml文件
'<?xml version='1.0' encoding='GB2312'?>'<ntsc>' <time>' <year>2010& ...
- Maven(三)理解Maven核心概念
转载自: http://www.cnblogs.com/holbrook/archive/2012/12/24/2830519.html 本文以类图的方式,介绍maven核心的12个概念以及相互之间的 ...