一. 最近在学习的过程中,学习到了一个比较好用的android的开源框架--EventBus。经过几次的百度借鉴与实践了解之后,整理如下,供以后的学习查阅。
二.关于EventBus的定义:
1.Android开源框架EventBus主要是替代Intent、Handler、BroadCast在Fragment、Activity、service、以及线程之间的传递消息。
2.特点:使用简单,代码简洁 。
3.EventBus是一个观察者模式的实现,他拥有观察者模式的三大要素:
1.Event: 事件(可以是任意类型的对象)
2.Subscriber: 事件订阅者,用于接收特定的事件
3.Publisher: 事件的发布者,用于通知Subscriber数据的变化
三.EventBus的使用方法:
1.首先要下载一个EventBus的jar包(https://repo1.maven.org/maven2/org/greenrobot/eventbus/3.0.0/eventbus-3.0.0.jar)。
ps: android Studio倒入jar包的方法:复制jar包到app-src-main-libs文件夹下,然后右键jar包,在弹出的菜单中点击Add As Library即可。就可以使用EventBus了。
2. 创建一个MsgTest类 用于封装要发送的信息,信息类型根据需要而定,这里使用String类型:
3.注册与注销(在需要接受数据的fragment或者Activity中的onCreate(),onStop()方法中进行)
1.注册使用: EventBus.getDefault().register(this);
2.注销使用: EventBus.getDefault().unregister(this);
3.具体代码:
注意:注册与注销一定是在要接收数据的fragment或者activity中。
4.发送数据:
完成了以上几步之后,接下来就可以发送参数了:
发送数据比较简单,我们只需要在需要发送数据的地方使用这条语句即可 EventBus.getDefault().post("你要发送的数据");:
5.接收数据:
接收数据有以下几种方法,只要在注册接收的fragment或者activity中使用任意一种方法即可:
1.public void onEvent(MsgTest msgTest) //事件的处理在和事件的发送在相同的线程,处理时间不应太长,不然影响事件的发送线程
2.public void onEventMainThread(MsgTest msgTest) //事件的处理会在UI线程中执行。事件处理时间不能太长
3.public void onEventBackgroundThread(MsgTest msgTest)//如果发送事件的线程是后台线程,会直接在当前后台线程执行事件;
如果当前线程是UI线程,事件会被加到一个队列中,由一个线程依次处理这些事件,
4.public void onEventAsync(MsgTest msgTest)//主要用于在后台线程中执行耗时操作,每个事件会开启一个线程
具体代码如下:
其他方法 接收方式一致;
@Subscribe 字段
四.总结:
总之,EventBus的使用就是这么简单。