Eventbus是一个开源库,主要用来进行事件通信,可以在Activities, Fragments, Threads, Services之间。
下载地址:EventBus
下面来看看用法
1、定义事件
public class WhateverEvent {
private String message
public WhateverEvent(String message){
this.message = message;
}
public String getMessage(){
return message;
}
2、注册、反注册EventBus
(1)getDefault() 为EventBus內建的Factory method,用来得到EventBus对象。
(2)没有unregister(this) 会造成memory leak
public class MainActivity extends AppCompatActivity {
...
@Override
protected void onResume() {
super.onResume();
EventBus.getDefault().register(this);
}
@Override
protected void onPause() {
super.onPause();
EventBus.getDefault().unregister(this);
}
...
}
3、订阅事件
public class MainActivity extends AppCompatActivity {
...
public void onEvent(WhateverEvent event) {
/* 处理事件 */
Log.i("TAG", event.getMessage());
};
...
}
onEvent() 可替换成 onEventMainThread(), onEventBackgroundThread(), onEventAsync()来指定要在哪个Thread执行。
在EventBus中的观察者通常有四种订阅函数(就是某件事情发生被调用的方法)
- onEvent:如果使用onEvent作为订阅函数,那么该事件在哪个线程发布出来的,onEvent就会在这个线程中运行,也就是说发布事件和接收事件线程在同一个线程。使用这个方法时,在onEvent方法中不能执行耗时操作,如果执行耗时操作容易导致事件分发延迟。
- onEventMainThread:如果使用onEventMainThread作为订阅函数,那么不论事件是在哪个线程中发布出来的,onEventMainThread都会在UI线程中执行,接收事件就会在UI线程中运行,这个在Android中是非常有用的,因为在Android中只能在UI线程中跟新UI,所以在onEvnetMainThread方法中是不能执行耗时操作的。
- onEventBackground:如果使用onEventBackgrond作为订阅函数,那么如果事件是在UI线程中发布出来的,那么onEventBackground就会在子线程中运行,如果事件本来就是子线程中发布出来的,那么onEventBackground函数直接在该子线程中执行。
- onEventAsync:使用这个函数作为订阅函数,那么无论事件在哪个线程发布,都会创建新的子线程在执行onEventAsync。
4、传送事件
public class WhatEverObject {
...
private void someMethod() {
/* 发送事件 */
EventBus.getDefault().post(new WhateverEvent("Hello world!!"));
};
...
}
知道用法以后,我们现在来看看下面这个图:
欢迎关注我的公众号:DroidMind
精品内容,独家发布