虽然我们功能比较低配,但是也得显得高大上,我们这次主要依赖于注解完成低配版本传递消息功能,什么优先级和黏性事件可以没事的时候自己推导一下。
注解开发-自定义EventBus之路1 ,注解篇在这里
https://www.jianshu.com/p/e59059a509f1
我们的自定义注解和ThreadMode
自定义注解 ThreadMode
然后我们要写注册和反注册方法,这里我们要先想想怎么写?
最终目的肯定是调用我们加了自定义注解的方法
反推,我们需要调用注解的方法就需要几个要素,1,对象实例,2方法,3,方法参数
在android里面,比如我们打开了一个页面,我们不能像普通对象一样,直接new一个然后点XXX方法这是不行的,android页面存在于栈列中,所有我们必须在注册的时候,引用页面的实例,在反注册那里删除实例。
方法这里,我们可以根据查找上面标识了我们自定义注解的方法,然后和存在的实例Context对应起来,是一个1VS多的状态,基本可以设定为Context--》List<我们注解的方法>。最后一点,参数,我们只需要关注,在post的时候,发送的参数和我们上面的List<我们注解的方法>里面方法参数能对上,就开始反射调用这个方法。
那我们按照这个思路开始写代码
私有化构造函数
书写Context和1对多注解方法的集合,每次注册的时候存放方法的集合
注册方法,
注册方法
反注册方法,避免内存泄露,毕竟我们引用了实例对象
反注册方法
发送消息方法 post,当我们发送一个事件的事情,需要对我们存的Context的符合对应参数的方法进行反射调用
根据发送的事件类型,查找符合匹配参数的方法和对用的Context
反射调用
写完了测试一下,我们开启一个Service和我们主页面俩地方进行注册,发送事件试试,我们写几个方法测试下看看是否符合我们的设想
onCreate注册 onDestroy 反注册
注册 反注册
一个符合要求的方法,一个不符合要求的方法
service也写好,注意注册
添加好点击事件,开启我们的Service,点击按钮发送事件,查看log
我们的符合要求的方法接收到了消息,不符合的没啥动静,完美的成功了
我们写的low版本的事件总线完成了,那么剩下的黏性发送和优先级,ThreadMode这些我们是不是可以抽时间测试一下呢,等我抽空写完传基友网上给大家看看。
已经上传到基友网,地址:https://github.com/594dudulang/LEventBus
下次我们写一个路由router的low版本,期待吧!
网友评论