EventBus探究(一)

“Yeah It’s on. ”

概述

EventBus是一款android发布/订阅的事件总线类库,主要用在android中
Activities,Fragments,以及后台线程之间的关联和消息传递,对事件的发送者和关联者进行解耦,避免了各组件直接交互复杂的依赖关系以及生命周期产生的问题。从而使我们的代码更简单更更高效。

简单的使用流程

  1. 定义一个事件
1
2
3
4
5
6
7
8
9
10
11
12
	public class MessageEvent {

private String message;

public String getMessage() {
return message;
}

public void setMessage(String message) {
this.message = message;
}
}

2.订阅/注册

1
EventBus.getDefault().register(this);

3.发布

1
EventBus.getDefault().post(me);

4.取消订阅

1
EventBus.getDefault().unregister(this);

下面是完整代码

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
public class MainActivity extends AppCompatActivity {

private static final String TAG = "MainActivity";

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

findViewById(R.id.btn).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
MessageEvent me = new MessageEvent();
me.setMessage("hello world");
EventBus.getDefault().post(me);
}
});
}

@Override
protected void onStart() {
super.onStart();
EventBus.getDefault().register(this);
}

@Override
protected void onStop() {
EventBus.getDefault().unregister(this);
super.onStop();
}

public void onEvent(MessageEvent event){
Toast.makeText(this, event.getMessage(), Toast.LENGTH_SHORT).show();

Log.d(TAG, event.getMessage());
}
}

总结

以上只是EventBus中最简单的使用,真正的项目中要比这复杂的多,但是麻雀虽小五脏俱全,上边的例子已经很好的说明了EventBus的工作流程,之后我也将对EventBus这个类库进行更深入的探究。

附录

EventBus github