eventbus的使用

来源:互联网 发布:mysql开启事务语句 编辑:程序博客网 时间:2024/05/17 04:14

eventbus包

包结构:

目前Android平台比较优秀的事件总线操作框架。

也许很多人会想问这个有什么用?这个其实类似于广播,一处发送,多处注册收发内容。

当Android项目越来越庞大的时候,应用的各个部件之间的通信变得越来越复杂,例如:当某一条件发生时,应用中有几个部件对这个消息感兴趣,那么我们通常采用的就是观察者模式,使用观察者模式有一个弊病就是部件之间的耦合度太高,在这里我将会详细介绍Android中的解耦事件总线EventBus的使用。

(关于EventBus的基本操作可看Demo中的EventBusActivity,其他用法请参看Demo中com.tandong.sademo.eventbus里的其他演示用法类)

EventBus和Otto效率对比的演示请看Demo中com.tandong.sademo.eventbuspkotto中的相关类

< 用法>//一处发送,多处接收//自定义一个事件(不需要继承任何类),通常我比较喜欢定义一个Message类//定义回调函数,相当于观察者模式中的on***Listener函数,在EventBus中可以定义四种类型的回调函数://onEvent   它和ThreadModel中的PostThread对应,这个也是默认的类型,当使用这种类型时,回调函数和发起事件的函数会在同一个线程中执行//onEventMainThread,当使用这种类型时,回调函数会在主线程中执行,这个在Android中非常有用,因为在Android中禁止在子线程中修改UI//onEventBackgroundThread,当使用这种类型时,如果事件发起函数在主线程中执行,那么回调函数另启动一个子线程,如果事件发起函数在子线程执行,那么回调函数就在这个子线程执行。//onEventBusAsync,当使用这种类型时,不管事件发起函数在哪里执行,都会另起一个线程去执行回调。public class EventBusActivity extends SmartActivity {@Overrideprotected void onCreate(Bundle savedInstanceState) {// TODO Auto-generated method stubsuper.onCreate(savedInstanceState);// 类似于广播,在需要接收内容的地方注册EventBus(有多种注册方式,这里只展示其中几种)// 注册:三个参数分别是,消息订阅者(接收者),接收方法名,事件类EventBus.getDefault().register(this);//EventBus.getDefault().register(this, "setTextA", SetTextAEvent.class);//EventBus.getDefault().register(this, "setTextB", SetTextBEvent.class);//EventBus.getDefault().register(this,"messageFromSecondActivity",SecondActivityEvent.class);//EventBus.getDefault().registerSticky(this, "messageFromSecondActivity", SecondActivityEvent.class);//EventBus.getDefault().register(this, "countDown", CountDownEvent.class);}public void postEvent(View view) {// 分发(在你需要发送内容消息的地方使用调用即可)EventBus.getDefault().post("SmartAndroid");// EventBus.getDefault().post(new MyEvent());}@Overrideprotected void onDestroy() {super.onDestroy();EventBus.getDefault().unregister(this);}// 以下展示其中4种接收处理事件内容的方法,方法名称固定public void onEventMainThread(String json) {// 接收事件内容地方(参数类型可以自己根据实际情况定义)}public void onEvent(Object obj) {// 默认接收事件内容地方(参数类型可以自己根据实际情况定义)}public void onEventAsync(Object event) {// 接收事件内容地方(参数类型可以自己根据实际情况定义)}public void onEventBackgroundThread(Object event) {// 接收事件内容地方(参数类型可以自己根据实际情况定义)}}

0 0
原创粉丝点击