EventBusHandler 一个基于 EventBus 原理实现跨界面 handler 通讯框架

1,182 阅读3分钟
原文链接: www.jianshu.com

启示录: EventBusHandler是一个基于EventBus原理实现跨界面handler通讯框架,整个项目里面只存在一个handler实例对象。

EventBusHandler下载地址-点击进入

在实际开发中你是不是也曾经因为handler通讯造成内存吃紧过呢?又或者因为无法跟其它页面通讯而苦苦摸索过呢?

恭喜你答对了,这些我都遇到过。

何时使用跨界面通讯:当前页面有些操作成功之后会影响其它页面数据变化,就要使用跨界面通讯。

相信做过电商的朋友们应该都知道购物车概念吧!(购物车-->购买-->清空购物车)购物车的概念差不多都是这个样子的。

购买成功是不是就要发消息告诉购物车页面刷新数据,此时就要跨界面通讯了。

前言:EventBusHandler的由来

我封装的EventBusHandler框架其实是因为有人给我灵感才完成的。

这个人就是Nohttp的作者严振杰-严振杰的博客-点击进入

因为那段时间我确实遇到因为handler造成的内存吃紧问题,正好他封装了一个超简单的handle优化内存的handler,然后我就拿来用参考一下。在参考的过程中我发现他写的这个调用起来太繁琐了,而且耦合性太高了,所以我就在他的那个handler优化内存的灵感下重新封装一个‘跟操作界面完全解耦,调用起来没有那么繁琐,handler内存优化,且跨界面通讯’的handler框架。

透露一个小秘密0_0....我在封装好这个‘跟操作界面完全解耦,调用起来没有那么繁琐,handler内存优化,且跨界面通讯’的handler框架时,我特么都不知道什么是EventBus(一直都是一个人开发,没有人指点,所以......你懂的。)。你是不是想问,既然你都不知道什么是EventBus,那特么你还说你这个是基于EventBus原理封装的?哈哈....这个其实也要感谢严振杰-严振杰的博客-点击进入了。因为我把封装好的handler发给他看时,是他告诉我这个封装是用EventBus原理去的。我记得我当时还特意去搜了一下才知道这确实EventBus原理封装。

我发现只要你的技术达到一个高度之后,你写的代码不知不觉就进入你都不曾了解的世界里面去了。

主题内容

                                                                     EventBusHandler架构图


EventBusHandler架构图

EventBusHandler主要由两个类两个接口+一个BaseHandler内部接口组成


主要部分

一,BaseHandler核心类

BaseHandler继承handler采取单例模式。然后在BaseHandler对象里面用稀疏数组SparseArray存储handler回调handleMessage方法里面要调用的对象,调用对象用SoftReference软引用做载体存储。BaseHandler类主要通过实现BaseHandlerMethod接口对SparseArray对象的增删查调等方面的操作


BaseHandler对象01


BaseHandler对象02


BaseHandler对象03

二,BaseHandlerOperate核心类

BaseHandlerOperate主要是通过获取BaseHandlerMethod接口对BaseHandler进行操作。BaseHandlerOperate类是为了更好让BaseHandler和Activity解耦。


BaseHandlerOperate对象01


BaseHandlerOperate对象02

三,BaseHandlerMethod接口


BaseHandlerMethod接口

四,BaseHandlerUpDate接口


BaseHandlerUpDate接口

简单使用说明

实现BaseHandlerUpDate接口,然后获取BaseHandlerOperate实例。


举了个栗子

然后就调用BaseHandlerOperate里面的方法去进行你想要的操作就可以了,


举了个栗子


basehandler给指定key发送信息

EventBusHandler下载地址-点击进入

如果你能发现问题,代表你有一双发现问题眼睛。如果你能把问题反馈给我,说明你有一份乐于助人的心灵。