位置: 编程技术 - 正文

EventBus 源码解析(一)(eventbus threadmode)

编辑:rootadmin

推荐整理分享EventBus 源码解析(一)(eventbus threadmode),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:eventbus 原理,@transactional源码解析,eventbus threadmode,eventbus 原理,eventbus原理解析简书,eventbus源码解析,eventbus原理解析简书,eventbus源码解析,内容如对您有帮助,希望把文章链接给更多的朋友!

EventBus 看见N次了,刚换工作,然后在这边项目里面又到处看到。好吧,既然如此多的人在使用,那么我也来看看,不然真的变out man了。

其实初始EventBus,发现使用很简单,通过EventBus.getDefault()获取单列对象,然后register(object),要调用函数时post(data),最后不使用的时候unregister(object)。既然这么使用那么我们根据这个流程来看EventBus。

首先,看EventBus的构造函数。看到EventBusBuilder,就想起建造者模式,果然EventBusBuilder有build()方法来构建EventBus。Builder 对于建造者模式来说差不多属性的配置,然后再量产对象出来。当然那些参数在代码里面会分析,主要是eventInheritance的使用。

接着,来看register()。其实很多个register最终都调用register(Object subscriber, boolean sticky, int priority),下面代码。注册这里先找我们这个对象里面需要可以发送消息的函数,并且把他们缓存起来,下面我们来看findSubscriberMethods()函数,

这里使用clazz.getDeclaredMethods()来查函数,就是可以查询public、private等函数,但不能访问从其他类继承的方法。那么在下面这里只取public方法了,并且过滤掉abstract、static、bridge、synthetic四种类型,对于abstract与static我们经常看到,那么对于后面两种,对于synthetic,如果经常反编译的会经常看到这个字符,当一个内部类访问外部类的方法时,在内部类就会出现这个字&#;;bridge则是java编译器采用bridge方法来兼容本该使用泛型的地方使用了非泛型的用法的。两个都是编译器后面添加的,因此这里也一起过滤掉了。另外只读取参数为一个的函数,如果这些都符合了,那么看是否是下面4种情况:

onEvent:ThreadMode.PostThread

onEventMainThread:ThreadMode.MainThread

EventBus 源码解析(一)(eventbus threadmode)

onEventBackgroundThread:ThreadMode.BackgroundThread

onEventAsync:ThreadMode. Async

如果符合就new SubscriberMethod(method, threadMode, eventType),如果不是这4中情况,要么你提前在EventBusBuilder里面skipMethodVerificationFor(skipclass)提前添加这个过滤掉的class,否则这里将抛异常。

查询完毕就将这些装有SubscriberMethod的缓存起来。

好了接着回到上面的subscribe方法,

上面代码里面写了解释,这里梳理一下,subscribe()方法就是将SubscribMethod方法放入subscriptionsByEventType,typesBySubscriber这两个map里面。然后如果是sticky,就马上去执行对应的方法。

这里用到CopyOnWriteArrayList,由于对CopyOnWriteArrayList不熟,看了下CopyOnWriteArrayList是ArrayList 的一个线程安全的变体,其中所有可变操作(add、set等等)都是通过对底层数组进行一次新的复制来实现的。可以知道线程安全,但是每次都需要copy操作的,因此开销会比较大。这里register()与unregister()的时候调用,也不算频繁变动,应该关键是线程安全,然后在这里使用。

再看下eventInheritance属性,这个属性其实是针对eventType的,如果这个属性为true时,它会找eventType父类或者继承的接口的对象,然后去调用那些函数。

到此register就讲完了,差不多就是,register的时候,先扫描需要的函数,然后将这些函数分类,以便查找,然后如果是设置sticky为true,就需要马上去执行函数操作。

cocos2d-x 3.5 入门(三) 昨天做完了Jumpandfall这个游戏的demo,尝试发布,遇到几个问题,应该也是常见的问题。在这里集中做记录。1、cocos:commandnotfound问题这是在eclipse中遇到的

Android 网络框架 android-async-http 转载请注明出处:明桑Android这是Android网络框架系列的最后一篇了~~,文章主要介绍第三方库android-async-http的使用,之后作为Android网络框架系列的完结,

Android eclipse for mac redo 快捷键 Androideclipseformacredo快捷键ShiftCommandZ:Redoctrlz的反向快捷键redo是Undoctrlz的反向快捷键Undo在windows里的eclipse操作是ctrlzRedo在windows里的eclipse操作是ctrlyRedoCtrlYI

标签: eventbus threadmode

本文链接地址:https://www.jiuchutong.com/biancheng/384324.html 转载请保留说明!

上一篇:Android直接强制退出(android强制关机)

下一篇:cocos2d-x 3.5 入门(三)(cocos2dx 4.0)

  • 自来水水费增值税发票票样
  • 个人独资企业要承担无限责任吗
  • 公司账户转私人账户要多久时间
  • 保证人不承担责任(胜诉案例)
  • 各行业的利润率表
  • 收外汇必须报关吗
  • 住宿发票没有天数
  • 销售费用变动率税收政策
  • 实收资本印花税税率
  • 退货折价的账务处理分录
  • 汇算清缴的利润表本期数与本年数
  • 土地使用税什么意思
  • 企业清算需要什么
  • 收到失控发票写情况说明
  • 进项转出发票是否还可以转回抵扣做分录呢?
  • 分摊费用怎么说合适
  • 税控设备维护费怎么填申报表
  • 一般纳税人在国家电子税务局里面如何添加银行账户
  • 案例分析一般纳税人的税负率怎么计算?
  • 异地工程要预缴环境税款吗
  • 利润表中所得税费用为负数是什么意思
  • 收入确认的
  • 计提的管理费用要结转吗
  • 企业安排残疾人就业有啥优惠政策
  • 发生可抵扣暂时性差异是调增还是调减
  • 国有土地租金怎么交税
  • 财务费用在汇算清缴时填哪里科目
  • 小企业财务报表模板免费下载
  • 以前年度进项税少记了如何调整
  • 此次新政策对原来就是小型微利企业的纳税人有影响吗?
  • ami bios怎么设置u盘启动
  • 在王者荣耀里怎么删除好友
  • 隐藏分区怎么打开
  • win10系统关机后自动开机怎么办
  • kb4499164安装失败怎么办
  • u盘显示0字节修改不了
  • 房贷每月利息如何算
  • php的项目
  • 流转税政策
  • sql实现mysql的分页功能
  • 哪些项目计入其他应收款
  • php封装数据库连接
  • 固定资产加速折旧最新税收政策2023
  • 2023华为OD机试题
  • 基于车联网
  • 使用spring框架,大概有哪些步骤
  • thinkphp5微信公众号开发
  • 单项履约成本是什么意思
  • 长期待摊费用的摊销分录
  • 运输发票开具条件
  • 小规模纳税人如何界定
  • 大气污染物排放2020标准
  • mongodb操作语句
  • 什么叫动量交易
  • 税控发票如何入账
  • 弥补亏损的会计分录是怎样的
  • 红字发票开错可以重开吗
  • 代扣员工伙食费
  • 以美元报关是否要交税
  • mysql 表不存在报错信息
  • mysql的存储引擎有哪些,区别是什么
  • SQL Server性能优化工具Profiler
  • 核定征收过了时间就不能申请了吧
  • 企业银行流水可以不给税务吗
  • 汽车运输企业交什么税
  • 应税服务零税率是什么
  • 小规模增值税税率2023
  • 外币账户结汇至人民币账户
  • 半成品加工需要什么手续
  • 员工外出培训报告范文
  • 个税多缴了纳税人怎么办
  • 坏账准备计入营业外支出什么明细
  • sql报无效字符
  • 在centos7中,一般用( )命令来查看网络接口的状态
  • 局域网win7 64位旗舰版共享打印机状态错误0x0000000a的详细图文解决方法
  • 数字图像处理期末考试
  • python3 cookie
  • 国税局地点
  • 江苏城市规划
  • 2019小规模纳税人标准
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设