eventbus使用

Android EventBus源码解析

你离开我真会死。 提交于 2020-03-10 09:31:47
前言 上一篇文章自己对EventBus的用法进行了简单的叙述,然后自己又去研究了一下EventBus3.0源码也参考了网上的一些大佬的博客进行进一步的理解,写这一篇文章让自己对EventBus有个好的总结回顾,如有不正确的地方欢迎留言。 一、EventBus简介 在EventBus没出现之前,那时候的开发者一般是使用Android四大组件中的广播进行组件间的消息传递,那么我们为什么要使用事件总线机制来替代广播呢?主要是因为: 广播:耗时、容易被捕获(不安全)。 事件总线:更节省资源、更高效,能将信息传递给原生以外的各种对象。 关于事件其实是一个泛泛的统称,指的是一个概念上的东西(不一定非得用什么Event命),通过查阅官方文档,事件的命名格式并没有任何要求,你可以定义一个对象作为事件,也可以发送基本数据类型如int,String等作为一个事件。后续的源码也可以进步证明(方法的命名并没有任何要求,只是加上@Subscribe注解即可!同时事件的命名也没有任何要求)。 EventBus作为一个消息总线主要有三个组成部分: 事件(Event): 可以是任意类型的对象。通过事件的发布者将事件进行传递。 事件订阅者(Subscriber): 接收特定的事件。 事件发布者(Publisher): 用于通知 Subscriber 有事件发生。可以在任意线程任 意位置发送事件。

EventBus-订阅总线

橙三吉。 提交于 2020-03-06 02:57:14
EventBus-订阅总线 介绍EventBus 案例:通过EventBus给Fragment设置EditText传来的值 介绍EventBus EventBus是一种用于Android的事件发布-订阅总线,它简化了应用程序内各个组件之间进行通信的复杂度,尤其是碎片之间进行通信的问题,可以避免由于使用广播通信而带来的诸多不便。 在EventBus中有三个重点 1、发送者 用来在任意线程中,发送数据,参数是Objcet类型. 2、接收者 用来接收数据.但是接收之前需要在当前的页面注册和注销, @Override public void onStart ( ) { super . onStart ( ) ; //订阅事件 EventBus . getDefault ( ) . register ( this ) ; } @verride public void onStop ( ) { super . onStop ( ) ; //退订事件 EventBus . getDefault ( ) . unregister ( this ) ; } 3、事件 需要发送的内容,这里也可以封装成一个对象 @Subscribe ( threadMode = ThreadMode . MAIN ) public void getMsg ( EvenBus e ) { tvShow . setText

EventBus使用及源码分析

微笑、不失礼 提交于 2020-02-27 13:21:31
基于EventBus 3.1.1 主要参考: EventBus 3.0 源码分析 在其基础上添加了些个人理解,建议直接看参考原文 注册订阅者 EventBus.getDefault().register(this) 获取默认的 EventBus 实例 在程序中创建多个EventBus 的实例,每个EventBus可看做一个管道,管道间相互独立 getDefault() 就是获取一个全局默认的管道, 因为多数场景下只需要用一个 EventBus 实例即可(尤其事件的收发需要同一个实例,所以提供了默认的实例的获取方法) EventBusBuilder 设置的是 EventBus 的配置信息 ,即EventBus可能有几个属性在不同的应用场景下需要有不同的值;同时EventBus也有都是固定值的属性,这些直接在EventBus初始化时赋值或初始化即可 EventBus 的几个成员变量 a. subscriptionsByEventType : Map<Class<?>, CopyOnWriteArrayList> b. typesBySubscriber : Map<Object, List<Class<?>>> c. stickyEvents : Map<Class<?>, Object> public static EventBus getDefault ( ) { if (

EventBus 3.0 的基本使用

让人想犯罪 __ 提交于 2020-02-27 11:26:21
EventBus 3.0 的基本使用 1.什么是EventBus? EventBus 是一个Android端优化的publish/subscribe消息总线,简化了应用程序内各组件间、组件与后台线程间的通信。比如请求网络,等网络返回时通过Handler或Broadcast通知UI,两个Fragment之间需要通过Listener通信,这些需求都可以通过EventBus实现。 2.使用EventBus有什么好处? 采用消息发布/订阅的一个很大的优点就是代码的简洁性,并且能够有效地降低消息发布者和订阅者之间的耦合度。 3.EventBus 3.0 的使用 在 AndroidStudio中添加依赖: compile ‘org.greenrobot:eventbus:3.0.0’ 2.注册和注销 你需要在一个Activity或者Fragment中注册eventbus事件,然后定义接收方法,这和Android的广播机制很像,你需要首先注册广播,然后需要编写内部类,实现接收广播,然后操作UI,在EventBus中,你同样需要这么做。比如: @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout

EventBus源码解析(对应3.2.0版本)

亡梦爱人 提交于 2020-02-24 20:19:35
1. 注册EventBus: register(Object subscriber) 获取该subscriber的SubscribeMethod列表; List<SubscriberMethod> subscriberMethods 执行 subscriberMethodFinder.findSubscriberMethods(subscriberClass) 获取 List<SubscriberMethod> ; 执行 findUsingReflectionInSingleClass() 反射获取subscriber中所有methods,Subscribe注解的Method会记录在 SubscriberMethodFinder.FindState.subscriberMethods() ; 遍历SubscribeMethod列表执行 subscribe(subscriber, subscriberMethod) ; 更新 Map<Class<?>, CopyOnWriteArrayList<Subscription>> subscriptionsByEventType ,该字段表示:某个Event对应哪些@Subscribe注解的方法; 更新 Map<Object, List<Class<?>>> typesBySubscriber ,该字段表示

Vue 组件间通信六种方式

谁说我不能喝 提交于 2020-02-24 18:56:19
前言 组件是 vue.js最强大的功能之一,而组件实例的作用域是相互独立的,这就意味着不同组件之间的数据无法相互引用。一般来说,组件可以有以下几种关系: 如上图所示,A 和 B、B 和 C、B 和 D 都是父子关系,C 和 D 是兄弟关系,A 和 C 是隔代关系(可能隔多代)。 针对不同的使用场景,如何选择行之有效的通信方式? 方法一、 props / $emit 父组件A通过props的方式向子组件B传递。 1.父组件向子组件传值 接下来我们通过一个例子,说明父组件如何向子组件传递值:在子组件Users.vue中如何获取父组件App.vue中的数据 users:["Henry","Bucky","Emily"] //App.vue父组件 <template> <div id="app"> <users v-bind:users="users"></users>//前者自定义名称便于子组件调用,后者要传递数据名 </div> </template> <script> import Users from "./components/Users" export default { name: 'App', data(){ return{ users:["Henry","Bucky","Emily"] } }, components:{ "users":Users } } 复制代码 /

EventBus

做~自己de王妃 提交于 2020-02-10 13:01:20
参考文章: EventBus使用详解 一、EventBus基本使用 1.定义传递事件类 public class MessageEvent { public String Message ; public MessageEvent ( String message ) { Message = message ; } } 2.设置事件订阅者 /* 订阅者 */ @Subscribe ( threadMode = ThreadMode . MAIN ) public void getMessage ( MessageEvent messageEvent ) { button . setText ( messageEvent . Message ) ; View } 在ThreadMode 枚举中定义了4个线程模式 1、PostThread:事件响应函数和事件发布在同一线程中执行。这个是默认值,这样可以避免线程切换。 2、MainThread:事件响应函数会在Android应用的主线程(大部分情况下都是UI线程)中执行。 3、BackGround:事件响应函数会在一个后台线程中执行。如果事件发布函数不是在主线程中,则会立即在事件发布线程中执行响应函数。如果事件发布函数在主线程中,EventBus则会在唯一的一个后台线程中按照顺序来执行所有的后台事件响应函数。 4、Async

EventBus的小tips

牧云@^-^@ 提交于 2020-02-03 18:42:05
1. EventBus的线程模式 2.黏性事件 3. 配置混淆规则 . . . . 0.EventBus的简介 一个Android事件发布/订阅轻量级框架, 功能:通过解耦发布者和订阅者简化Android事件传递 [2] EventBus可以代替Android传统的Intent,Handler,Broadcast或接口函数,在Fragment,Activity,Service线程之间传递数据,执行方法。 特点:代码简洁,是一种发布订阅设计模式(观察者设计模式)。 . . 1. EventBus的线程模式 ThreadMode 因为安卓对线程的严格限制,EventBus也相应的进行的不同的线程控制。通过指定线程模式,我们可以控制订阅回调函数运行于哪一个线程。 线程模式主要有: POSTING :在哪个线程发布就在哪个行程执行 MAIN :在主线程执行,如果订阅方回调事件较为耗时,则发布方的后续指令会被阻塞。 MAIN_ORDERED :发布后会立即执行后续的指令,不会被订阅方回调事件阻塞。 BACKGROUND :在后台线程执行(非UI线程),如果发布方在非UI线程,则订阅方也会在相同的线程,如果发布方在UI线程,则订阅方会新建一个线程,并在该线程中执行。 ASYNC :不管事件在哪个线程发布,都会在独立的新开的线程中执行。可以执行耗时操作 2.黏性事件

Android EventBus3.0源码解析

久未见 提交于 2020-01-26 15:02:14
前言 上一篇 我们讲到了EventBus3.0的用法,这一篇我们来讲一下EventBus3.0的源码以及它的利与弊。 1.构造函数 当我们要调用 EventBus 的功能时,比如注册或者发送事件,总会调用 EventBus.getDefault() 来获取 EventBus 实例: public static EventBus getDefault() { if (defaultInstance == null) { synchronized (EventBus.class) { if (defaultInstance == null) { defaultInstance = new EventBus(); } } } return defaultInstance; } 很明显这是一个单例模式,采用了双重检查模式 (DCL),不了解的同学可以查看 设计模式(二)单例模式的七种写法 这篇文章。 接下来看看 new EventBus() 做了什么: public EventBus() { this(DEFAULT_BUILDER); } 这里 DEFAULT_BUILDER 是默认的 EventBusBuilder ,用来构造 EventBus : private static final EventBusBuilder DEFAULT_BUILDER = new

分布式事务,EventBus 解决方案:CAP【中文文档】

可紊 提交于 2020-01-14 03:00:47
原文: 分布式事务,EventBus 解决方案:CAP【中文文档】 最新文档地址: https://github.com/dotnetcore/CAP/wiki 前言 很多同学想对CAP的机制以及用法等想有一个详细的了解,所以花了将近两周时间写了这份中文的CAP文档,对 CAP 还不知道的同学可以先看一下 这篇文章 。 本文档为 CAP 文献(Wiki),本文献同时提供中文和英文版本,英文版本目前还在翻译中,会放到Github Wiki 中。 目录 前言 1、Getting Started 1.1 介绍 1.2 应用场景 1.3 Quick Start 2、API接口 2.1 发布/发送 2.1.1 事务 2.2 订阅/消费 2.2.1 例外情况 3、配置 3.1 Cap Options 3.2 RabbitMQ Options 3.3 Kafka Options 3.4 SqlServer Options 3.5 MySql Options 4、设计原理 4.1 动机 4.2 持久化 4.3 通讯数据流 4.4 一致性 5、实现 5.1 消息表 5.2 消息格式 5.3 EventBus 5.4 重试 6、分布式事务 6.1 异步确保 7、FAQ 1、Getting Started 1.1 介绍 CAP 是一个遵循 .NET Standard 标准库的C#库