Eventbus 开源库的使用

EventBus是一款用用于android上的事件分发/订阅的总线,包含发布者、订阅者、事件和总线。主要用于android中intent,handler等在activity,fragment等组件间传递消息。它极好的将消息的发送者和接收者解耦,方便组件间的通信。
下载地址:
原地址:https://github.com/greenrobot/EventBus
涛哥的地址:https://github.com/kymjs/EventBus (包含部分中文注释)

1、简单使用

首先下载改开源库,导入项目中。接下来就是具体的使用了。如下几个方法:

  • EventBus.getDefault().register(this);注册订阅者
  • EventBus.getDefault().post(“点击按钮,发送消息”);发送消息,传入的是自己的事件类对象
  • 重写 onEventMainThread(Object object) 方法;接收处理消息,这里参数与发送消息的类型一致。
  • 在 onDestroy()中注销当订阅者。

这里仅仅为了说明用法,简单的实现代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
package com.tx.eventbusdemo;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;
import de.greenrobot.event.EventBus;

public class MainActivity extends Activity {

private Button mbtnSend;
private TextView mtvShowmsg;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//当前类注册为事件订阅者
EventBus.getDefault().register(this);
mbtnSend = (Button) findViewById(R.id.btn);
mtvShowmsg = (TextView) findViewById(R.id.show);

mbtnSend.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
//发送消息
EventBus.getDefault().post("点击按钮,发送消息");
}
});
}
//接收处理消息
public void onEventMainThread(Object object) {
mtvShowmsg.setText(object.toString());
}
@Override
protected void onDestroy() {
super.onDestroy();
//注销注册
EventBus.getDefault().unregister(this);
}
}

效果图:

2、解析实现过程

首先在oncreate方法中注册订阅者,它就会扫描当前类,把onEvent开头的方法记录到map中(Key为方法的参数类型,Value中包含我们的方法);
当子线程执行完毕后,调用post方法,根据其参数查找对应的方法,通过反射来执行相关的方法。

EventBus包含4个ThreadMode:PostThread,MainThread,BackgroundThread,Async。
对应的方法及功能为:
onEventPostThread 在当前发布事件的线程中执行
onEventMainThread 在ui线程中执行
onEventAsync 加入后台任务队列,使用线程池调用。
onEventBackgroundThread 在非UI线程发布的事件,则直接执行;否则,加入后台任务队列,使用线程池一个接一个调用。

当前网速较慢或者你使用的浏览器不支持博客特定功能,请尝试刷新或换用Chrome、Firefox等现代浏览器