EventBus的出现完美的解决了多个线程和多个activity、fragment之间的通信问题,下面我们来讲解一下具体的实现原理:

1、首先通过EventBus.getDefault().register(this);进行注册,getDefult()使用的单例双重锁创建了EventBus实例

2、在看一下register(),通过反射,图中标记1方法是把当前对象的所有带@Subscribe注解的方法保存到list中,2是遍历每一个方法,取出方法的eventType,创建Subscription对象存放实体对象和方法的封装类,再将eventType与Subscription关联起来

3、EventBus.getDefault().post(Object event);的post()是去将参数对象添加到队列,并判断当时所在线程,去匹配所有与这个参数相关的方法,这里参数只能有1个

4、EventBus.getDefault().unregister(this); 的 unregister()解绑主要就是将当前类中集合里面的方法删除掉

总结:EventBus原理,主要是通过注解和反射实现,将方法保存在公共队列中供其调用,首先在register()的时候,通过反射把当前类的所有方法遍历,然后把带有@Subscribe注解的方法保存在队列中,在调用的时候发送post方法,与队列中的方法进行匹配,这里只匹配方法的参数,如果一样的话就掉起该方法。

Android EventBus的实现原理相关推荐

  1. java eventbus 原理_本文为 Android 开源项目实现原理解析 EventBus 部分,从源码分析 EventBus 的实现原理...

    之前太忙导致 Android 开源项目实现原理解析 一度搁浅,目前一期进行中,我也完成了 EventBus 分析的初稿,大家可以稍微看看后面会继续润色下. PS:本文直接复制 Markdown,格式有 ...

  2. Android - EventBus

    统计时间 2023.4.30 最后版本更新时间 2021.12.8 version 3.3.1 star 24.3k 1.EventBus 的使用场景 2.EventBus 和 BroadcastRe ...

  3. android动画的实现原理,Android动画的实现原理 .

    1.动画运行模式 独行模式 中断模式 2.Animation类 每个动画都重载了父类的applyTransformation方法这个方法的主要作用是把一些属性组装成一个Transformation类, ...

  4. android 版本更新原理,Android系统Recovery工作原理之使用update.zip升级过程分析(二)...

    Android系统Recovery工作原理之使用update.zip升级过程分析(二)---update.zip差分包问题的解决 在上一篇末尾提到的生成差分包时出现的问题,现已解决,由于最近比较忙,相 ...

  5. Android Handler与Looper原理简析

    一直感觉自己简直就是一个弱智,最近越来越感觉是这样了,真的希望自己有一天能够认同自己,认同自己. 本文转载于:https://juejin.im/post/59083d7fda2f60005d14ef ...

  6. Android系统Recovery工作原理之使用update.zip升级过程分析(五)

    Android系统Recovery工作原理之使用update.zip升级过程分析(五)---update.zip包从上层进入Recovery服务文章开头我们就提到update.zip包来源有两种,一个 ...

  7. 【Android架构师java原理详解】二;反射原理及动态代理模式

    前言: 本篇为Android架构师java原理专题二:反射原理及动态代理模式 大公司面试都要求我们有扎实的Java语言基础.而很多Android开发朋友这一块并不是很熟练,甚至半路初级底子很薄,这给我 ...

  8. 深入解析阿里Android热修复技术原理

    前言:本文框架 什么是热修复? 热修复框架分类 技术原理及特点 Tinker框架解析 各框架对比图 总结 通过阅读本文,你会对热修复技术有更深的认知,本文会列出各类框架的优缺点以及技术原理,文章末尾简 ...

  9. Android热修复技术原理详解(最新最全版本)

    本文框架 什么是热修复? 热修复框架分类 技术原理及特点 Tinker框架解析 各框架对比图 总结   通过阅读本文,你会对热修复技术有更深的认知,本文会列出各类框架的优缺点以及技术原理,文章末尾简单 ...

最新文章

  1. Hibernate Mysql 写入中文乱码 解决方法
  2. shell在一个大文件找出想要的一段字符串操作技巧
  3. python qt 拖拽组件使用方法_Python QT组件库qtwidgets的使用
  4. mysql 备库,【MySQL】数据库备库策略与脚本
  5. Koa2 和 Express 中间件对比
  6. 利用python从网络上爬取图片_我用Python爬取了妹子网100G的套图
  7. 解决“你正在使用的浏览器版本过低,将不能正常浏览和使用知乎”问题
  8. 618当天,90%的程序员在干什么?
  9. Java使用多线程,UPD通过控制台之间互相通讯
  10. 高校创新英语挑战活动策划方案
  11. 【第70期】终于找到了!AI学习路线图——从零基础到就业
  12. 基于JavaScript+css写一个简单的h5动态下雨效果
  13. 亚马逊海外购最受中国Prime会员喜爱的十大品牌(内含榜单)
  14. RestTemplate上传图片到指定接口
  15. 网站安全公司生存发展趋势分析
  16. 植物大战僵尸内存地址(转)
  17. 报错:Caused by: tech.yooo.common.exception.controller.ControllerException: null
  18. win10系统日志显示不可用sid_小编处理win10系统启用或禁用日志的处理办法
  19. 2021-08-14王汕8.15黄金指导】黄金,下周一黄金走势分析,外汇黄金实时策略指导
  20. 解决ubantu opencv_python-3.4.2.16-...manylinux1_i686-.whl is not a supported wheel on this platform.

热门文章

  1. mysql ping命令_Ping命令详解
  2. 使用两个无线路由器实现桥接中继
  3. Actor编程模型——简介
  4. 2021 年 React 的 5 大富文本编辑器
  5. HDU 2563 统计问题
  6. 域账号创建、组创建,域账号加入组,客户端登陆域账号
  7. 解决魅族17横屏全屏会有白边问题
  8. AFNetworking为什会请求不到数据
  9. Ubuntu20.04安装nvidia显卡驱动并解决重启后黑屏问题
  10. 车载系统升级、“特饭”会员品牌上线,解读新特背后的互联网产品逻辑...