Android EventBus的实现原理
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的实现原理相关推荐
- java eventbus 原理_本文为 Android 开源项目实现原理解析 EventBus 部分,从源码分析 EventBus 的实现原理...
之前太忙导致 Android 开源项目实现原理解析 一度搁浅,目前一期进行中,我也完成了 EventBus 分析的初稿,大家可以稍微看看后面会继续润色下. PS:本文直接复制 Markdown,格式有 ...
- Android - EventBus
统计时间 2023.4.30 最后版本更新时间 2021.12.8 version 3.3.1 star 24.3k 1.EventBus 的使用场景 2.EventBus 和 BroadcastRe ...
- android动画的实现原理,Android动画的实现原理 .
1.动画运行模式 独行模式 中断模式 2.Animation类 每个动画都重载了父类的applyTransformation方法这个方法的主要作用是把一些属性组装成一个Transformation类, ...
- android 版本更新原理,Android系统Recovery工作原理之使用update.zip升级过程分析(二)...
Android系统Recovery工作原理之使用update.zip升级过程分析(二)---update.zip差分包问题的解决 在上一篇末尾提到的生成差分包时出现的问题,现已解决,由于最近比较忙,相 ...
- Android Handler与Looper原理简析
一直感觉自己简直就是一个弱智,最近越来越感觉是这样了,真的希望自己有一天能够认同自己,认同自己. 本文转载于:https://juejin.im/post/59083d7fda2f60005d14ef ...
- Android系统Recovery工作原理之使用update.zip升级过程分析(五)
Android系统Recovery工作原理之使用update.zip升级过程分析(五)---update.zip包从上层进入Recovery服务文章开头我们就提到update.zip包来源有两种,一个 ...
- 【Android架构师java原理详解】二;反射原理及动态代理模式
前言: 本篇为Android架构师java原理专题二:反射原理及动态代理模式 大公司面试都要求我们有扎实的Java语言基础.而很多Android开发朋友这一块并不是很熟练,甚至半路初级底子很薄,这给我 ...
- 深入解析阿里Android热修复技术原理
前言:本文框架 什么是热修复? 热修复框架分类 技术原理及特点 Tinker框架解析 各框架对比图 总结 通过阅读本文,你会对热修复技术有更深的认知,本文会列出各类框架的优缺点以及技术原理,文章末尾简 ...
- Android热修复技术原理详解(最新最全版本)
本文框架 什么是热修复? 热修复框架分类 技术原理及特点 Tinker框架解析 各框架对比图 总结 通过阅读本文,你会对热修复技术有更深的认知,本文会列出各类框架的优缺点以及技术原理,文章末尾简单 ...
最新文章
- Hibernate Mysql 写入中文乱码 解决方法
- shell在一个大文件找出想要的一段字符串操作技巧
- python qt 拖拽组件使用方法_Python QT组件库qtwidgets的使用
- mysql 备库,【MySQL】数据库备库策略与脚本
- Koa2 和 Express 中间件对比
- 利用python从网络上爬取图片_我用Python爬取了妹子网100G的套图
- 解决“你正在使用的浏览器版本过低,将不能正常浏览和使用知乎”问题
- 618当天,90%的程序员在干什么?
- Java使用多线程,UPD通过控制台之间互相通讯
- 高校创新英语挑战活动策划方案
- 【第70期】终于找到了!AI学习路线图——从零基础到就业
- 基于JavaScript+css写一个简单的h5动态下雨效果
- 亚马逊海外购最受中国Prime会员喜爱的十大品牌(内含榜单)
- RestTemplate上传图片到指定接口
- 网站安全公司生存发展趋势分析
- 植物大战僵尸内存地址(转)
- 报错:Caused by: tech.yooo.common.exception.controller.ControllerException: null
- win10系统日志显示不可用sid_小编处理win10系统启用或禁用日志的处理办法
- 2021-08-14王汕8.15黄金指导】黄金,下周一黄金走势分析,外汇黄金实时策略指导
- 解决ubantu opencv_python-3.4.2.16-...manylinux1_i686-.whl is not a supported wheel on this platform.