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中的代码如下
1 public class FirstEvent { 2 3 private String msg; 4 public FirstEvent(String str){ 5 msg = str; 6 } 7 8 public String getMsg(){ 9 return msg; 10 } 11 }
2.注册一个订阅者,在MainActivity.java 中的onCreate()方法中加入如下代码
1 EventBus.getDefault().register(this);
3.发布一个事件。在SecondActivity中发布一个事件,当点击button后发布事件,代码如下
1 protected void onCreate(Bundle savedInstanceState) { 2 super.onCreate(savedInstanceState); 3 setContentView(R.layout.activity_second); 4 5 btn = (Button)findViewById(R.id.second_btn); 6 btn.setOnClickListener(new View.OnClickListener() { 7 @Override 8 public void onClick(View v) { 9 10 //发布一个事件 11 EventBus.getDefault().post(new FirstEvent("this is an event. ")); 12 } 13 });
4.接收并处理一个事件,在MainActivity中处理改事件,添加如下代码。
1 public void onEventMainThrend(FirstEvent event){ 2 String str = "this is in main activity , "+event.getMsg(); 3 4 Log.d("yuqt",str); 5 tv.setText(str); 6 Toast.makeText(this,str,Toast.LENGTH_LONG).show(); 7 }
5.注销事件,在onDestroy()中进行注销。
1 protected void onDestroy() { 2 super.onDestroy(); 3 EventBus.getDefault().unregister(this); 4 }
完成。