EventBus工作流程

如何在微信小程序中使用事件总线进行组件通信? 【代码】如何在微信小程序中使用事件总线进行组件通信? 阅读详情

# 1.实现订阅者类
public class SampleSubscriber {

public void onEvent(Event event) {
// do something while on event occur
}
}


# 2.初始化一个EventBus
EventBus.getDefault();


# 3.注册订阅者 (subscribe)


EventBus.getDefault().register(new SampleSubscriber());


List<SubscriberMethod> SubscriberMethodFinder.findSubscriberMethods(Class<?> subscriberClass)
SubscriberMethod:
包含订阅者Method引用,消息类型Class,线程模式枚举变量


遍历上句中的列Method列表进行注册
EventBus.subscribe(Object subscriber, SubscriberMethod subscriberMethod, boolean sticky, int priority)


存储消息类型与订阅的映射 Map<Class<?>, CopyOnWriteArrayList<Subscription>> subscriptionsByEventType


subscriptions = new CopyOnWriteArrayList<Subscription>();
subscriptionsByEventType.put(eventType, subscriptions);
根据订阅的优先级添加新订阅
int size = subscriptions.size();
for (int i = 0; i <= size; i++) {
    if (i == size || newSubscription.priority > subscriptions.get(i).priority) {
        subscriptions.add(i, newSubscription);
        break;
    }
}


存储订阅者与消息类型的映射Map<Object, List<Class<?>>> typesBySubscriber
List<Class<?>> subscribedEvents = typesBySubscriber.get(subscriber);
if (subscribedEvents == null) {
    subscribedEvents = new ArrayList<Class<?>>();
    typesBySubscriber.put(subscriber, subscribedEvents);
}
subscribedEvents.add(eventType);


Map<Class<?>, Object> stickyEvents
最后判断是否是针对sticky消息的订阅者,并且有sticky的该类型的消息存在,则完成注册后直接检查是否队列中有该消息,有则直接向该订阅者发送消息




4.发布信息 (post)
分为四种
PostThread
MainThread
BackgroundThread
Async


处理堆栈
取出消息队列,并从消息队列中取出事件,将事件与当前的postState一起交给postSingleEvent处理
EventBus.postSingleEvent(Object event, PostingThreadState postingState)
该方法中处理是否有继承关系
EventBus.postSingleEventForEventType(Object event, PostingThreadState postingState, Class<?> eventClass)
该方法中根据事件取得对应的订阅者
EventBus.postToSubscription(Subscription subscription, Object event, boolean isMainThread)
该方法中根据postState判断onEvent所在的线程类型
EventBus.invokeSubscriber(Subscription subscription, Object event)
该方法做最终的调用处理
除PostThread类型或PostThread就是MainThread/BackgroundThread外,其他三种都由各自的Poster完成


# 3种Poster
mainThreadPoster由HandlerPoster完成功能,继承自Handler
backgroundPoster和asyncPoster都通过实现Runnable完成功能backgroundPoster是asyncPoster的一种特殊形式,是一个单一的队列。
asyncPoster则可能有多个同时执行
小程序源码 EventBus-master.zip 免责声明:资料部分来源于合法的互联网渠道收集和整理,部分自己学习积累成果,供大家学习参考与交流。收取的费用仅用于收集和整理资料耗费时间的酬劳。 本人尊重原创作者或出版方,资料版权归原作者或出版方所有,本人不对所涉及的版权问题或内容负法律责任。如有侵权,请举报或通知本人删除。 立即下载

相关推荐

微信小程序页面通讯以及组件化的一些思考

作者:Uheinanba,来自原文地址   组件页面通信 使用globalData或者storage的弊端(造成的隐蔽的bug)。 使用eventBus的问题。(使用复杂) 尝试解决方案 event + emit invoke(推荐)   混合(mixin) 混合可以将组之间的可复用部分抽离,从而在组件中使用混合时,可以将混合的数据,事件以及方法注入到组件之中。混合分为两种: 默认式混合 兼容式混合 默认式混合  对于组件data数据,events事件 采用默认式混合,即如果组件未声明该数据,组件,事件,自定义方法等,那么将混合对象中的选项将注入组件这中。对于组件已声明的选项将不受影响。 兼容

微信小程序全局事件订阅eventBus

在Vue开发中,我们可能用过eventBus来解决全局范围内的事件订阅及触发逻辑,在微信小程序的开发中我们可能也也会遇到同样的需求,那么我们尝试下在小程序(原生小程序开发)中实现类似eventBus的事件订阅功能。

坑人的小书童 2523

微信小程序页面间通信的5种方式

主要介绍了微信小程序页面间通信的5种方式,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

小程序中eventBus的实现

EventBus是消息传递的一种方式,基于一个消息中心,订阅和发布消息的模式,称为发布订阅者模式。 //创建EventBus对象 let EventBus = function () { console.log("eventbus init..."); }; //准备数组容器 var objBus = [], arrbus = []; //添加方法 EventBus.prototype = { emit: function (key, data) { if (key) { f

随风潜入夜,不白头 1801

Event bus、事件通信、支持 各大平台小程序(微信小程序、支付宝小程序 等等).zip

微信小程序的优势在于它方便快捷、轻量级、跨平台、丰富的推广方式、丰富的功能接口、数据分析与优化、结合微信支付、支持多场景应用、社交功能以及多端同步等。这些优点使得小程序能够满足用户的多种需求,提供更好的用户体验

Mac上安装Label Studio

以上步骤详细说明了如何在Mac上通过Anaconda安装Label Studio。记得根据你的具体需求选择是否创建新的环境,并使用conda或pip进行安装。安装完成后,务必验证Label Studio是否成功运行。

g2526的博客 1958

微信小程序状态共享

例如,可以在App实例中定义一个全局的数据存储对象,将需要在不同页面之间共享的状态存储在这个对象中,然后通过事件的方式在页面间进行状态的传递和更新。小程序状态共享是指在小程序中,将一些需要在不同页面或组件之间共享的状态或数据存储在一个共享的容器中,以便在不同页面或组件间进行访问和管理。在实际开发中,合理使用状态共享的方式,可以有效减少页面之间的耦合,提高代码的复用性和可维护性。综上所述,小程序中的状态共享是一个重要的开发技术,可以通过合适的方式来实现页面或组件之间的状态共享,提升代码的复用性和可维护性。

lllomh的博客 2403

SMETANA 安装使用教程

关于SMETANA的安装和简单使用信息

qq_44940977的博客 1170

原生微信小程序全局事件总线

在所需要的页面通过 app.globalData.eventBus.on(‘isregionUpdated’, this.onIsregionUpdated);页面生命周期管理:在页面加载时订阅事件,在页面销毁时取消订阅,以避免内存泄漏和不必要的事件处理。全局性:事件总线可以跨越页面、组件甚至小程序的整个生命周期,提供了一种有效的全局通信机制。参数传递:可以通过事件对象来传递需要的数据,确保信息的完整性和正确性。解耦性:可以降低页面或组件之间的耦合度,提高代码的可维护性和复用性。

oneya1的博客 1055

Windows Server远程桌面断开后,PyWinAuto/按键精灵脚本失效?试试这个‘会话保持’的终极配置

本文深入解析Windows Server远程桌面断开后导致PyWinAuto/按键精灵脚本失效的问题,提供会话保持的终极配置方案。通过转换到控制台会话(console模式)和调整组策略,确保自动化程序在断开连接后持续稳定运行,适用于Windows Server各版本。

weixin_28738165的博客 227

Eps总结(1)——Eps入门级基本操作:新建工程、加载数据、新建对象、输入输出对象、基本操作

一、新建工程 1、点击工程的“新建” 2、选择比例尺,自定义工程名字,选择保存路径(最好是英文名字与路径) 二、加载本地倾斜影像、点云、超大影像(正射影像): 其中加载点云数据:a.首先需要将las点云转换为pcd格式。b然后才能加载点云。 三、新建点、线、面等对象 1、首先选择好要画的类型: 2、当选择好要画的类型后,不论是点、线、面都使用左侧工具条中的“一条线”进...

liukunrs的博客 4万+

EventBus工作流程及原理

EventBus工作流程及原理 几种线程模式(ThreadMode) POSTING 该模式是指事件的发送和处理均处于同一线程,且为默认模式 MAIN 该模式下,事件的消费在主线程 MAIN_ORDERED 事件的消费有序在主线程中发生 BACKGROUND a. 事件的发送在子线程,事件的消费也在当前子线程中 b. 事件的发送在主线程,会新建一个子线程来消费该事件(订阅的方法在子线程中执行) ASYNC 事件的消费在独立的子线程中,既不是事件发送的线程,也不是主线程 使用 要理解EventBus是如

daio_odai的博客 993

Python爬虫获取Shopee店铺的所有商品?

通过上述代码示例,我们可以轻松实现获取Shopee店铺所有商品信息的功能。Python爬虫不仅具有强大的功能和稳定性,还可以通过丰富的库支持实现高效的数据抓取和解析。希望这篇文章能为你提供一些启发和帮助。如果你对爬虫开发有更多兴趣,可以尝试探索更复杂的功能,如多线程爬取、数据可视化等。如果你在实践中遇到任何问题,欢迎随时交流和讨论。让我们一起用技术的力量,解锁更多可能!

2401_87195067的博客 1544

通俗理解EventBus工作流程

想了个办法方便让自己记忆EventBus的工作流程,就是代入生活中的事情。 EventBus的工作流程可以通俗地类比于去餐厅吃饭,顾客是事件订阅者,厨房是发送者。 首先顾客来到餐厅,查看菜单,开始点菜,在菜单上打勾勾什么的,菜可以认为是事件(Event),点完之后由服务员(subscriberMethodFinder)接管,服务员找出顾客点了什么菜,然后将其一样一样录入餐厅的点餐系统(subscribe方法),点餐系统由subscriptionsByEventType、typesBySubscriber、s

Just can't kickflip. 266

【收藏向】模拟电子技术超强知识点总结 20小时不挂科

模电真的有难度的一门课,一定要好好学… 用的教材是华科康华光版,其他版本教材也可参考,内容是差不多的。 话不多说直接上思维导图干货(后有思维导图高清原图链接) 1 绪论 2 运算放大器 3 二极管及其基本电路 4 场效应管及其放大电路 5 双极结型三极管及其放大电路 三种组态总结看不清,给个特写 发现虽然csdn上传的是原图,但是显示的图片不是特别清晰,在此贴出B站知乎地址,第五章之后的内容都在上面,还可以查看原图 ———————————————————— B站专栏地址(可以点击查看原图) htt

工科狗Niko的博客 1万+

大模型驱动时序量化因子自动优化:从WorldQuant回测到实战策略

本文探讨了如何利用大模型驱动时序量化因子的自动优化,构建从创意生成到实战验证的完整流程。通过结合WorldQuant回测平台,搭建自动化流水线,详细拆解了因子生成、回测验证与迭代优化的核心模块。文章分享了从初版实现到进阶优化的实践经验,并指出提示词工程与领域知识注入是关键,旨在实现人机智能协作,提升量化策略研发效率。

wdx012345的博客 803

源码解析--理解EventBus工作流程

EventBus源码解析(上) EventBus的创建和变量 创建EventBus对象 EventBus成员变量 EventBus的订阅 Register() unRegister() EventBus源码解析(上) EventBus是我们使用相当频繁的一个开源库,使用方式比较简单,功能强大,如此抢到的一个库,怎能不一探其内部实现? EventBus的创建和变量 ...

lizebin_bin的博客 629

一文搞定 ST22 短转储 MEMORY_NO_MORE_PAGING:看懂 SAP Paging 机制,参数 rdisp/PG_SHM 与 rdisp/PG_MAXFS 怎么设才稳

SAP系统MEMORY_NO_MORE_PAGING错误通常源于Paging资源耗尽而非物理内存不足。关键排查点包括:通过ST22确认错误类型,ST02监控Paging使用情况,检查工作进程trace中的"no more free blocks"提示。解决方案建议将rdisp/PG_SHM和rdisp/PG_MAXFS设为相同值(如250000块≈2GB),使Paging完全在内存中运行。同时需优化易耗Paging的代码逻辑,如避免滥用EXTRACT命令和超大内存对象传输。典型案例如月末

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 335

EventBus原理详解

  版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.youkuaiyun.com/michael_yt/article/details/52014022 在EventBus 3.0 使用介绍 这篇博客中介绍了关于EventBus的一些使用方法,下面我们就来看看它内部的具体实现吧! 流程图 先来一张整体流程图: 思路图 在看看register 和 post 的过程...

daimengs的博客 2605

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

EventBus要点解析

使用流程register(object)eventBus.post(event) 举个简单例子基类Activitypublic class CommonActivity extends AppCompatActivity { protected EMEventBus eventBus; @Override protected void onCreate(Bundle saved

让创意的火花散落到屏幕的每一个dp 1348

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

Android EventBus

Android EventBus 1.Eventbus工作流程 2.导入EventBus库 implementation 'org.greenrobot:eventbus:3.1.1' 3.角色分配 发布者(publisher):用于发出事件 订阅者(subscriber):用于接收事件 事件(Event):事件本体 4.操作 发布者(Publisher): bt_01.setOnClickListener(new View.OnClickListener() { @Override

qq_39383231的博客 2418

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

Android中EventBus的简单使用

Android系统内置的事件通讯存在缺点:Android系统中的事件通信则是 handler (消息机制) 和 BroadCastReceiver (广播机制), 通过它们可以实现组件之间的事件通讯。缺点在于,代码量多、组件之易产生藕合引用。

Sean_Word的博客 2401

手写一个EventBus

EventBus是一种事件发布/订阅模式的实现,用于在应用程序的不同组件之间进行通信。它允许组件之间通过事件来进行解耦,从而实现松散耦合的架构。

为了WLB努力 1305

Android源码解析--EventBus原理

版权声明:本文为openXu原创文章【openXu的博客】,未经博主允许不得以任何形式转载 目录1. EventBus使用2. @Subscribe3. register()注册订阅者3.1 查找订阅方法3.2 subscribe()注册4. unregister()注销订阅5. post()发布事件6. 事件分发HandlerPosterBackgroundPoster && AsyncPoster7. 粘性事件Subscriber Index9. 总结 EventBus是greenr.

openXu的专栏 1256

EventBus详解

Android EventBus 的原理基于观察者模式,它允许不同组件之间的通信,而无需这些组件之间有直接的依赖关系。

hqb112233的博客 783

EventBus3.0源码解读

EventBus是我们在项目当中最常用的开源框架之一。对于EventBus的使用方法也是非常的简单。然而EventBus内部的实现原理也不是很复杂。在这里便针对EventBus3.0的源码进行一下详细的分析。对于EventBus的详细使用可以参考EventBus3.0使用详解这篇文章。

李江东 1万+
上一篇: 使用IDEA开发Android项目时遇到Cannot merge new index into a non-jumbo instruction! 的解决
snowd
博客等级 码龄18年 1粉丝 7原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值