您的位置:首页 > 移动开发 > Android开发

浅谈EventBus在Android开发中的常见用法与理解

2017-04-07 15:17 549 查看
前言:

在项目中经常会用到一些消息的传递,这个时候我们一般会考虑使用广播BoradCast,但是现在又多了一种考虑-那就是EventBus

简单介绍

1. EventBus是由greenrobot 组织贡献的一个Android事件发布/订阅轻量级框架

2. 功能:通过解耦发布者和订阅者简化Android事件传递

3. EventBus可以代替Android传统的Intent,Handler,Broadcast或接口函数,在Fragment,Activity,Service线程之间传递数据,执行方法

4. 特点:代码简洁,是一种发布订阅设计模式(观察者设计模式)

这里我们来看看官方给出的图示,这里我也不做过多的介绍,具体的官方都已经说的很清楚不清楚的可以去看看:https://github.com/greenrobot/EventBus



接下来说说用法:

1.引入:如果是Android studio开发的项目直接把下面这句话放入app下面的build.gradle文件里面就可以使用了;如果是eclipse开发的项目则需要下载jar包放入lib文件夹中使用提供一个自己用的jar包供大家下载

2.使用:在使用的时候需要进行注册和注销:

在oncreat方法中注册EventBus.getDefault().register(this);在onDestory中注销EventBus.getDefault().unregister(this);

3.发送:在需要发送消息的地方EventBus.getDefault().post(“你好”)

4.接收:在接收的地方定义一个方法 方法名可以去任意的名字但是需要添加一个注解@Subscribe,并且要指定线程模型(默认为POSTING)例如:@Subscribe(threadMode = ThreadMode.MAIN)

public void getMsg(String msg) {

}

5.注意:EventBus不仅可以传递int,String还可以有很多类型,比如object或者是对象,实体类等,但是接收的地方一定要和发送的类型相同

6.EventBus粘性事件:这个粘性事件和粘性广播差不多,只有在发送和接收的时候有一点小小的不同:在发送的时候EventBus.getDefault().postSticky(String”粘性事件”); 然后接收的地方采用粘性接收 在订阅的地方申明粘性就可以了:@Subscribe(threadMode = ThreadMode.MAIN,sticky = true)

7.混淆规则

keepattributes Annotation

-keepclassmembers class ** {

@org.greenrobot.eventbus.Subscribe ;

}

-keep enum org.greenrobot.eventbus.ThreadMo
b7d2
de { *; }

# only required if you use AsyncExecutor

-keepclassmembers class * extends org.greenrobot.eventbus.util.ThrowableFailureEvent {

(java.lang.Throwable);

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  android EventBus