EventBus是一个订阅/发布消息总线,实现在应用程序里面,组件之间,线程之间的通信。因为event是任意的类型,所以这个使用起来非常方便。
eventbus中的角色:
event:当然就是事件啦
subscriber:事件的订阅者,先注册,接收特定的对象,并通过onEventXXX()来回收处理事件。
Publisher:事件的发布者,通过post发布信息。
处理过程主要分为5步:
1.定义一个事件(event)
2.注册一个订阅者
3.发布一个事件
4.接收处理一个事件
5.注销一个订阅者
四种处理事件的方式onEventXXXX
onEvent函数一共有四种,前面的例子只用到一个onEvent。
函数名 | 含义 | ThreadMode |
---|---|---|
onEvent | 事件处理在事件发送的那个线程执行 | PostThread |
onEventMainThread | 事件在主线程-UI线程执行 | MainThread |
onEventBackgroundThread | 事件在一个后台线程执行(就一个后台线程) | BackgroundThread |
onEventAsync | 事件会单独启动一个线程执行(每个事件都会启动一个线程) | Async |
其中前三个事件处理方式,都应该尽快完成。
在as下的代码示例
改module下的在build.gradle 文件里面,dependencies目录下添加这一句话
compile 'de.greenrobot:eventbus:2.4.0'
在连网的情况下,build工程,as会自动去网上下载相应的jar包。build结束后就可以编程了。
1.定义event。在FirstEvent.java中的代码如下
public class FirstEvent { private String msg;
public FirstEvent(String str){
msg = str;
} public String getMsg(){
return msg;
}
}
2.注册一个订阅者,在MainActivity.java 中的onCreate()方法中加入如下代码
EventBus.getDefault().register(this);
3.发布一个事件。在SecondActivity中发布一个事件,当点击button后发布事件,代码如下
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_second); btn = (Button)findViewById(R.id.second_btn);
btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) { //发布一个事件
EventBus.getDefault().post(new FirstEvent("this is an event. "));
}
});
4.接收并处理一个事件,在MainActivity中处理改事件,添加如下代码。
public void onEventMainThrend(FirstEvent event){
String str = "this is in main activity , "+event.getMsg(); Log.d("yuqt",str);
tv.setText(str);
Toast.makeText(this,str,Toast.LENGTH_LONG).show();
}
5.注销事件,在onDestroy()中进行注销。
protected void onDestroy() {
super.onDestroy();
EventBus.getDefault().unregister(this);
}
完成。