在应用开发过程中少不了使用Intent,线程,广播传递数据,当应用包还比较小的时候我们并不会感觉这些方法会有多麻烦,但是当应用包越来越大,模块越来越多,功能越来越复杂,这用这些方法就会感觉越来越难受,甚至你自己都感觉写的想吐,而这时EventBus就是你最好的选择(其实我最开始就想代替跳转传值而已),Eventbus具有集成方便,简单易用,代码量少,耦合性低的优点,大大的方便了各个功能模块(activity,fragment,service等等)的通信
1. 先上一个EventBus的地址吧EventBus GitHub地址
看看他的介绍,个人较懒,就不打字了,直接上图,我比较喜欢图
总而言之,言而总之吧,大概意思就是:EventBus能够简化各组件间的通信,能有效的吧发送方和接收方分离,避免过度依赖导致程序出错的问题
2.EventBus的三个重点
①MessageEvent实体对象,有很多都说是EventBus的事件,也确实是事件(因为EventBus根据他来判断是是谁发的事件),但总的来说总归是个对象,万物皆对象嘛,没有对象也可以new一个对象嘛,好了,扯远了现在扯回来,这个MessageEvent对象(事件)可以是任何类型的,String,int,,,Object等,他承载了我们需要发送的数据
②Subscriber事件订阅者,用于接收事件,方法名可以随意取,单是必须是公开方法(public),非公开方法会报错哦,亲测报错.......
③Promulgator事件发布者,用于发布事件,简单来说就是一句代码的事,如果不行就换句代码,,,,,,下面例子会说到
3.集成EventBus
在build下添加,,,,不多说了,用AS的都知道
4.注册与注销
在你看的顺眼生命周期注册一下(onCreate,onStart),然后在不顺眼的地方在注销下,(onStop,onDestroy),尽量去尝试,注意生命周期哦,,,,,注册代码为EventBus.getDefault.register();注销代码为EventBus.getDefault.unregister()。在这里说一下另一条语句,EventBus.getDefault.isRegister(),这条语句是判断是否注册的,可以配合上面那两句代码用
实现代码
5.发送消息
先搞一个实体对象(事件)用来发送消息,例如下图:
然后写个发送事件布局就一个button
6.接收事件,接收事件,接收事件
7.运行程序测试,去吧皮卡丘
结尾:
EventBus用法当然不止这些,这些只是最简单最基本的用法,下篇文章给大家唠叨唠叨粘性传递