EventBus

示例:使用消息传递在活动和服务之间进行通信

戏子无情 提交于 2020-01-06 16:08:31
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 我找不到如何在活动和服务之间发送消息的任何示例,而我花了太多时间弄清楚了这一点。 这是一个示例项目,供其他人参考。 此示例使您可以直接启动或停止服务,并分别与该服务绑定/解除绑定。 服务运行时,它将以10 Hz的频率递增。 如果活动绑定到 Service ,它将显示当前值。 数据以整数和字符串的形式传输,因此您可以看到如何使用两种不同的方式。 活动中还有一些按钮可以向服务发送消息(更改增量值)。 屏幕截图: AndroidManifest.xml: <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.exampleservice" android:versionCode="1" android:versionName="1.0"> <application android:icon="@drawable/icon" android:label="@string/app_name"> <activity android:name=".MainActivity" android:label="@string/app_name">

ABP官方文档翻译 3.7 领域事件(事件总线)

不问归期 提交于 2020-01-01 18:37:31
领域事件( 事件总线 ) 事件总线 注入IEventBus 获取默认实例 定义事件 预定义事件 处理异常 实体更改 触发事件 处理事件 处理基础事件 处理者异常 处理多个事件 注册处理者 自动 手动 取消注册   在C#中,一个类可以定义自己的事件,其他类可以注册它以便当一些事情发生时就会被通知。对于桌面应用或者单独的windows服务而言,这是非常有用的。但是,对于Web应用,会有一点儿问题,因为对象在web请求中被创建并且是短暂存在的。注册类事件非常困难。直接注册另一个类的事件会使类变得紧耦合。   在应用中,领域事件可以用来解耦业务逻辑且能够反应重要的领域更改。 事件总线    事件总线是一个单例对象,被其他所有的类共享来触发和处理事件。为了使用事件总线,你需要获取一个它的引用。可以使用两种方式来获取。 注入IEventBus    你可以使用依赖注入获取IEventBus的引用。这里,我们使用属性注入模式: public class TaskAppService : ApplicationService { public IEventBus EventBus { get; set; } public TaskAppService() { EventBus = NullEventBus.Instance; } }   属性注入比构造函数注入更加适合注入事件总线。因此

ABP框架 - 领域事件(EventBus)

隐身守侯 提交于 2020-01-01 18:37:07
文档目录 本节内容: EventBus 注入 IEventBus 获取默认实例 定义事件 预定义事件 处理完异常 实体修改 触发事件 处理事件 处理基类事件 处理程序异常 处理多个事件 处理程序注册 自动 手动 反注册 在C#里,一个类可以定义自己的事件,然后其它类可以注册它,当某些事情发生时,接收到通知。这对于桌面应用或单机的Windows服务非常有用。但是,对于一个Web应用,它就有点问题,因为对象在一个web请求里创建,并且它们生命周期都很短。所以就难于注册一些类事件,同时,直接注册另一个类的事件,也使得类之间更加藕合。 领域事件一般用来解藕业务逻辑和在应用里发生重要领域修改时发出通知。 EventBus EventBus是一个单例对象,被所有类触发事件或处理事件时共享。为使用事件总线,你先要引用它,有两种方式。 注入 IEventBus 你可以用 依赖注入 获取一个IEventBus的引用,这儿我们使用属性注入模式: public class TaskAppService : ApplicationService { public IEventBus EventBus { get; set; } public TaskAppService() { EventBus = NullEventBus.Instance; } } 在注入事件总线上,属性注入比构造器注入更合适

EventBus(一) 简单使用,不使用反射,使用注解处理器

送分小仙女□ 提交于 2019-12-30 22:50:06
导入依赖 // 依赖第三方库:EventBus implementation 'org.greenrobot:eventbus:3.1.1' annotationProcessor 'org.greenrobot:eventbus-annotation-processor:3.1.1' 给EventBus注解处理器传参 // 给注解处理器传参 javaCompileOptions { annotationProcessorOptions { arguments = [ eventBusIndex : 'com.netease.eventbus.demo.MyEventBusIndex' ] } } Application中初始化 /** * http://greenrobot.org/eventbus/documentation/subscriber-index/ */ public class BaseApplication extends Application { @Override public void onCreate() { super.onCreate(); EventBus.builder().addIndex(new MyEventBusIndex()).installDefaultEventBus(); } } 注册 public class

事件总线 EventBus

老子叫甜甜 提交于 2019-12-30 09:00:18
661. .net中事件模型很优雅的实现了观察者模式,同时被大量的使用在各种框架中。 [2016-04-30 10:52:42] 662. Prism框架中实现了一个典型的EventAggregator,有时候我们又把此类实现叫做EventBus。 [2016-04-30 10:53:12] 663. EventBus内部通过一个类型为ConcurrentDictionary<Type,List<Action<object>>> 的字典来存储主题和观察者列表 [2016-04-30 10:53:36] 664. 从事件到消息是思维的一个转变,Messenger认为所有注册的主题都是消息。 [2016-04-30 10:54:42] 665. 利用反射,事件总线会将实现了IEventHandler的处理程序与相应事件关联到一起,相当于实现了事件处理程序对事件的订阅 [2016-04-30 10:56:28] 666. 2014年8月15日 - Kafka是分布式发布-订阅消息系统。它最初由LinkedIn公司开发,之后成为Apache项目的一部分。Kafka是一个分布式的,可划分的,冗余备份的持久性的日志服务。 [2016-04-30 10:59:47] 667. 2016年3月9日 - 关于Chuye.Kafka Chuye.Kafka 是Kafka 0.9版本 API 的

Guava - EventBus(事件总线)

隐身守侯 提交于 2019-12-30 09:00:03
Guava在 guava-libraries 中为我们提供了事件总线EventBus库,它是事件发布订阅模式的实现,让我们能在领域驱动设计(DDD)中以事件的弱引用本质对我们的模块和领域边界很好的解耦设计。 不再多的废话,直奔Guava EventBus主题。首先Guava为我们提供了同步事件EventBus和异步实现AsyncEventBus两个事件总线,他们都不是单例的,官方理由是并不想我们我们的使用方式。当然如果我们想其为单例,我们可以很容易封装它,一个单例模式保证只创建一个实例就对了。 下面将以EventBus为例,AsyncEventBus使用方式与其一致的。 订阅 首先EventBus为我们提供了register方法来订阅事件,Guava在这里的实现很友好,我们不需要实现任何的额外接口或者base类,只需要在订阅方法上标注上 @Subscribe 和保证 只有一个输入参数 的方法就可以搞定。这样对于简单的某些事件,我们甚至可以直接 new Object() { @Subscribe public void lister(Integer integer) { System.out.printf("%d from int%n", integer); } } Guava发布的事件默认不会处理线程安全的,但我们可以标注@AllowConcurrentEvents来保证其线程安全

EventBus 事件总线 案例

血红的双手。 提交于 2019-12-30 08:59:40
简介 地址:https://github.com/greenrobot/EventBusEventBus是一个【发布 / 订阅】的事件总线。简单点说,就是两人【约定】好怎么通信,一人发布消息,另外一个约定好的人立马接收到你发的消息。EventBus是一款针对Android优化的发布/订阅事件总线。主要功能是替代Intent,Handler,BroadCast在Fragment,Activity,Service,线程之间传递消息。优点:开销小,代码更优雅,将发送者和接收者解耦。 用处:相信大家都用过【Handle】了进行线程通信,回调方法进行通信,是不是觉得特麻烦。EventBus就可以帮减少很多事,不管你在【任何地方】发布一个事件,接收者都能立马接收到你的消息,不用你考虑android【子线程操作UI线程】的问题! EvenBus简化了应用程序内【各组件间】、【组件与后台线程间】的通信。它的效果和Handler的效果大致相同,但是实现原理和使用方法是完全不同的,它是基于【保存】相应方法,然后通过【反射】机制来实现的。 包含4个成分:发布者,订阅者,事件,总线。 关系 :订阅者订阅事件到总线,发送者发布事件; 订阅者可以订阅多个事件,发送者可以发布任何事件,发布者同时也可以是订阅者。 注册订阅者: EventBus.getDefault().register(this);

事件总线EventBus

纵饮孤独 提交于 2019-12-30 08:59:16
什么是事件总线管理? 将事件放到队列里,用于管理和分发; 保证应用的各个部分之间高效的通信及数据,事件分发; 模块间解耦; 什么是EventBus? EventBus是发布/订阅的事件总线。EventBus模式-也被称为MessageBus或者发布者/订阅者(publisher/subcriber)模式——可以让两个组件相互通信,但是他们之间并不相互知晓。 基于事件总线管理/订阅/分发模式的。事件响应有更多的线程选择,EventBus可以向不同的线程中发布事件。EventBus支持Sticky Event。 使用时需要先注册订阅,然后向订阅者分发消息数据即可。包含4个成分:发布者,订阅者,事件,总线。订阅者可以订阅多个事件,发布者可以发布任何事件,发布者同时可以也是订阅者。分订阅、注册、发布、取消注册等步骤。 如下图: EventBus.getDefault().register(this); //注册事件 EventBus.getDefault().post(object); //发送事件 EventBus.getDefault().unregister(this); //取消事件 //订阅处理事件的方法和区别 //UI线程执行 public void onEventMainThread() {} //当前发布事件的线程执行 public void

C# 事件总线 EventBus

冷暖自知 提交于 2019-12-30 08:58:51
1. 引言 事件总线这个概念对你来说可能很陌生,但提到观察者(发布-订阅)模式,你也许就很熟悉。事件总线是对发布-订阅模式的一种实现。它是一种集中式事件处理机制,允许不同的组件之间进行彼此通信而又不需要相互依赖,达到一种解耦的目的。 我们来看看事件总线的处理流程: 了解了事件总线的基本概念和处理流程,下面我们就来分析下如何去实现事件总线。 2.回归本质 在动手实现事件总线之前,我们还是要追本溯源,探索一下事件的本质和发布订阅模式的实现机制。 2.1.事件的本质 我们先来探讨一下事件的概念。都是读过书的,应该都还记得记叙文的六要素:时间、地点、人物、事件(起因、经过、结果)。 我们拿注册的案例,来解释一下。 用户输入用户名、邮箱、密码后,点击注册,输入无误校验通过后,注册成功并发送邮件给用户,要求用户进行邮箱验证激活。 这里面就涉及了两个主要事件: 注册事件:起因是用户点击了注册按钮,经过是输入校验,结果是是否注册成功。 发送邮件事件:起因是用户使用邮箱注册成功需要验证邮箱,经过是邮件发送,结果是邮件是否发送成功。 其实这六要素也适用于我们程序中事件的处理过程。开发过WinForm程序的都知道,我们在做UI设计的时候,从工具箱拖入一个注册按钮(btnRegister),双击它,VS就会自动帮我们生成如下代码: void btnRegister_Click(object sender,

Android消息传递之EventBus

拥有回忆 提交于 2019-12-30 08:49:02
EventBus产生需求背景: 在做项目的时候往往需要应用程序内各组件间、组件与后台线程间的通信。比如耗时操作,等耗时操作完成后通过Handler或Broadcast将结果通知给UI,N个Activity之间需要通过Listener通信,其实这些都可以通过EventBus轻松实现,EventBus通过发布/订阅(publish/subscribe)方式来管理事件总。EventBus通过注解和反射机制 将订阅者连同订阅函数保存起来,然后在发送订阅的时候 遍历订阅函数数组进行调用,其实从这方面就可以EventBus执行效率多少会受到一点影响。 github地址:https://github.com/greenrobot/EventBus EventBus主要角色: Event 传递的事件对象 Subscriber 事件的订阅者 Publisher 事件的发布者 ThreadMode 定义函数在何种线程中执行 官网给出的各种角色的协作图 EventBus配置: EventBus框架也是采用建造者模式设计的,可以通过EventBusBuilder来设置一些配置信息,例如设置debug模式下要抛出异常 EventBus示例: 之前做图片类项 的时候,需要处理一个点赞数据的同步,比如在作品的详情页点赞 需要同时更新列表页该作品的点赞数量,这里还是以此为例。  1.)build