EventBus

Rxjava之PublishSubject的使用

匿名 (未验证) 提交于 2019-12-02 21:53:52
此前对rxjava的诸多用法小小的进行过总结,rxjava的使用给代码设计带来了很多惊奇和方便。但是在了解到PublishSubject之后再次被rxjava的简便给折服了。在介绍PublishSubject之前,先容我给出这样一个命题,在Android的开发中,我们经常会在Service中处理批量下载的任务,然后将下载的进度显示在Activity中。如果需要完成Service中数据的更新到Activity数据的显示,可行的方案有哪些。 目前能够列举到的方案有如下: 1. DataBinding 2. 广播 3. EventBus 4. Rxjava的PublishSubject 这些方案中DataBinding,网上关于它的介绍不俗,但是我看实现中用起来还是有点麻烦,或许是我没有深入的了解和使用,它不是本文要介绍的重点。广播在使用中需要编写注册,解除注册的代码以及相关的BroadcastReceiver代码,代码量感觉小小的有点大。EventBus比广播要好一点点,但是同样需要注册EventBus和取消注册EventBus,只是可以通过注解来指定完成事件响应的函数。Rxjava的PublishSubject在设计中省去了注册和取消注册的逻辑,比广播和EventBus更高一筹。 以命题中介绍的Service进行批量下载

vue中的$EventBus.$emit、$on的应用

久未见 提交于 2019-12-02 15:49:51
今天在项目中遇到的一个需求:   在一个选项卡功能的页面,出现的问题是,当点击选项卡的某个选项时,会同时加载整个选项卡的数据,本身产品就很大,数据很多,所以这个问题无法忽略; 仔细研究下发现,当刚进入页面时,只会加载当前一个tab的数据,这样是正常的,但当再次点击别的tab时,之前tab的接口就都连带着再次请求一边,只要是不刷新页面,就一直切换tab,一直会有前边的tab数据接口重新请求,项目中tab实现是用的饿了么ui的tab选项卡,在研究了饿了么ui之后发现使用上没有什么问题,而且是子组件的v-if切换 1 <el-tabs v-model="activeName" @tab-click="tabClick" class="assetsIndex"> 2 <el-tab-pane label="IP地址" name="ip" class="assetsIndextitle"> 3 <FlawIp v-if="ipShow" /> 4 </el-tab-pane> 5 <el-tab-pane label="网站" name="web" class="assetsIndextitle"> 6 <FlawWeb v-if="webShow" />                                  index文件 7 </el-tab-pane> 8 </el

深入源码理解EventBus3.0

馋奶兔 提交于 2019-12-02 15:22:06
深入源码理解EventBus3.0 高效使用EventBus3.0 如果要使用EventBus,主要由五步构成, EventBus官方仓库 添加依赖: implementation 'org.greenrobot:eventbus:3.1.1' 定义events事件: public static class MessageEvent { /* Additional fields if needed */ } Prepare subscribers: Declare and annotate your subscribing method, optionally specify a thread mode: 准备订阅消息:定义方法名,添加注解,比如要在主线程,是sticky消息 @Subscribe(sticky = true, threadMode = ThreadMode.MAIN) public void onMessageEvent(MessageEvent event) {/* Do something */}; 注册和解注册订阅者 @Override public void onStart() { super.onStart(); EventBus.getDefault().register(this); } @Override public void onStop()

教你快速写一个EventBus框架

亡梦爱人 提交于 2019-12-01 07:18:32
前言 EventBus相信大多数人都用过,其具有方便灵活、解耦性强、体积小、简单易用等优点,虽然现在也有很多优秀的替代方案如RxBus、LiveDataBus等,但不可否认EventBus开创了消息总线时代,有很多优秀的思想可以供我们来借鉴学习。下面就让我们来撸一个超简单的EventBus,领略其实现方式的主要思想。 实现思路 先看一下GitHub中官方用法介绍: 1.定义消息实体类 public static class MessageEvent { /* Additional fields if needed */ } 1 2.准备订阅者:声明并注解订阅方法 @Subscribe(threadMode = ThreadMode.MAIN) public void onMessageEvent(MessageEvent event) {/* Do something */}; 1 2 注册和注销订阅者 @Override public void onStart() { super.onStart(); EventBus.getDefault().register(this); } @Override public void onStop() { super.onStop(); EventBus.getDefault().unregister(this); } 1 2 3 4 5

Android框架之EventBus的使用

穿精又带淫゛_ 提交于 2019-12-01 02:52:15
简介 EventBus是由greenrobot组织贡献的一个Android事件发布/订阅的轻量级框架。EventBus是一个Android端优化的publish/subscribe消息总线,简化了应用程序内各组件间、组件与后台线程间的通信。 优势 简化组件通信 解耦事件发送端和接收端 在Activity、Fragment和后台线程之间运行良好 避免复杂且易出错的依赖问题和生命周期问题 运行速度快 jar包小(小于50K) 具有指定分发线程和用户优先级等高级特性 特性 简单但强大:EventBus是一个微小的库,具有超级容易学习的API。然而,您的软件架构可能因组件解耦而受益:订阅者在使用事件时不用关心这个事件是谁发送的。 大量验证:EventBus是最常用的Android库之一:成千上万的应用程序使用EventBus,其中不乏非常受欢迎的应用程序。我们认为差不多有十亿应用程序使用EventBus。 高性能:Android系统上,性能尤为重要。 EventBus被针对性的做了大量的分析和优化;EventBus可能是这类开源库中速度最快的 解决方案。 基于API的便捷注解(不牺牲性能):只需将@Subscribe注解添加订阅方法即可。由于构建的时候花费了时间来建立注解的索引,所以EventBus不需要在应用程序的运行时间执行注释反射,注解反射的方式在Android上相当慢。

ASP.NET Core基于微软微服务eShopOnContainer事件总线EventBus的实现

无人久伴 提交于 2019-11-30 19:13:40
这个EventBus的实现是基于微软微服务 https://github.com/dotnet-architecture/eShopOnContainers 项目的,我把它从项目中抽离出来,打包成nuget包方便大家快速集成到项目中 从Nuget.org中安装 PM> Install-Package Toosame.EventBus.RabbitMQ -Version 1.1.2 使用 共3步: 添加事件 添加事件处理器 从控制器发布事件 1.添加事件 创建 YourEvent.cs 文件 1 public class YourEvent : IntegrationEvent 2 { 3 public string Name { get; set; } 4 5 public int Age { get; set; } 6 } 1.添加事件处理器 创建 YourEventHandler.cs 文件 1 public class YourEventHandler : IIntegrationEventHandler<YourEvent> 2 { 3 private readonly IConfiguration _configuration; 4 5 public YourEventHandler(IConfiguration configuration){ 6 //这里只是告诉你

EventBus的初级使用--Activity间传递消息

跟風遠走 提交于 2019-11-30 16:25:19
Activity 间的数据通信,对于数据量比较大的,避免使用 Intent + Parcelable 的方式,可以考虑 EventBus 等替代方案,以免造成 TransactionTooLargeException。 EventBus是一款Android下的发布/订阅事件总线机制。可以代替Intent、Handler、Broadcast等在Fragment、Activity之间传递消息。 优点:开销小,代码优雅。将发送者和接受者解耦。 第一步需要先导入依赖 implementation 'org.greenrobot:eventbus:3.1.1' 自定义事件类 public class MessageEvent { private String message; public MessageEvent(String message) { this.message = message; } public String getMessage(){ return message; } public void getMessage(String message){ this.message = message; } } 注册事件代码 //注册 EventBus EventBus.getDefault().register(this); 解除注册 //解注册EventBus if

Android框架之路——EventBus的使用

孤街浪徒 提交于 2019-11-30 16:25:00
一、简介 EventBus是由greenrobot 组织贡献的一个Android事件发布/订阅轻量级框架。EventBus是一个Android端优化的publish/subscribe消息总线,简化了应用程序内各组件间、组件与后台线程间的通信。比如请求网络,等网络返回时通过Handler或Broadcast通知UI,两个Fragment之间需要通过Listener通信,这些需求都可以通过EventBus实现。 官网地址: http://greenrobot.org/eventbus/ 翻译: http://blog.csdn.net/poorkick/article/details/55099311 <p> </p> 二、添加依赖 compile 'org.greenrobot:eventbus:3.0.0' 三、解锁技能 EventBus的三要素 Event :事件,可以是任意类型的对象。 Subscriber :事件订阅者,在EventBus3.0之前消息处理的方法只能限定于onEvent、onEventMainThread、onEventBackgroundThread和onEventAsync,他们分别代表四种线程模型。而在EventBus3.0之后,事件处理的方法可以随便取名,但是需要添加一个注解@Subscribe,并且要指定线程模型(默认为POSTING)。

高性能最终一致性框架Ray之基本概念原理

不羁岁月 提交于 2019-11-30 07:37:19
一、Actor介绍 Actor是一种并发模型,是共享内存并发模型的替代方案。 共享内存模型的缺点: 共享内存模型使用各种各样的锁来解决状态竞争问题,性能低下且让编码变得复杂和容易出错。 共享内存受限于单节点的服务器资源限制。 Actor模型的优点: 线程之间以消息进行通信,消息按顺序单线程处理,不存在状态竞争。 以消息方式通信,可以方便的组建集群。 把State和Behavior绑定,能更好的控制状态。 名词解释: Mailbox:可以理解为先入先出队列,负责接收和缓存送达的消息。 State:状态信息,比如用户的账户余额信息。 Behavior:负责按顺序处理Mailbox中的消息,比如扣款消息、到账消息,查询余额消息等。 二、Orleans介绍 Orleans是.Net基金会维护的一个Actor跨平台开源框架,独创Virtual Actor概念,支持分布式集群。 项目地址: http://dotnet.github.io/orleans/ 有以下优点: 以对象方式访问Actor,符合面向对象的使用习惯。 提出Virtual Actor概念,可以通过ID访问细粒度的Actor,能承载数千万的Actor对象。 支持Stateful,能替代缓存层来对内存状态进行更精确的控制,减少数据库的压力。 高性能,单个Actor能支持10万+的QPS。 激活透明,Actor对访问者是永久存在的

EventBus 3 全解

半腔热情 提交于 2019-11-30 04:16:50
EventBus 3 全解 [TOC] 使用 一个基于观察者模式的事件发布/订阅框架. 用于模块间通信和解耦, 使用方便,性能高. 基本使用 1. gradle导入依赖库 implementation 'org.greenrobot:eventbus:3.1.1' 2. 定义事件类 public class MessageEvent { public final String message; public MessageEvent(String message) { this.message = message; } } 3. 标记订阅方法. 当自定义事件发布后,此方法会被调用. // This method will be called when a MessageEvent is posted (in the UI thread for Toast) @Subscribe(threadMode = ThreadMode.MAIN) public void onMessageEvent(MessageEvent event) { Toast.makeText(getActivity(), event.message, Toast.LENGTH_SHORT).show(); } // This method will be called when a SomeOtherEvent