Andorid 开发过程中总会遇到各个模块耦合问题,使用EventBus是一种解耦方式。
EventBus 源代码下载地址 https://github.com/greenrobot/EventBus
如果一个ListView展示的内容需要到网络上请求该数据,那么该业务需要如下几个步骤:
1.发送请求拼装URL--->
2.发送请求-->
3.得到数据--->
4.渲染数据
//使用传统的Handler和线程
final Integer GET_DATA= 1001;
final Handler handler = new Handler(){
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
if(msg.what == GET_DATA){
// 做渲染
}
}
};
new Thread(){
public void run() {
//发送HTTP请求得到数据
String result = "";
//result = http.get("http://test.com/list");
Message message = handler.obtainMessage();
message.getData().putString("result",result);
message.what = GET_DATA;
handler.handleMessage(message);
}
}.start();
//使用EventBus
class ResponseEvent{
String result;
ResponseEvent(String result){
this.result = result;
}
}
class ResponseErrorEvent{
}
class RequestEvent{
StringBuffer url=new StringBuffer("http://test.com");
RequestEvent(String url){
this.url.append(url);
}
}
class HttpManager{
//子线程运行
public void onEventBackgroundThread(RequestEvent request){
try{
String result ="";
//开始发送HTTP请求来说去数据
//result = http.get(request.url);
//将获取到的数据发送出去,监听了改Event的地方都可以获取到数据
EventBus.getDefault().post(new ResponseEvent(result));
}catch (Throwable throwable){
LogUtil.e(throwable);
EventBus.getDefault().post(new ResponseErrorEvent());
}
}
}
//注册需要事件监听器
EventBus.getDefault().register(new HttpManager());
//注册需要事件监听器
EventBus.getDefault().register(this);
EventBus.getDefault().post(new RequestEvent("/list"));
//主线程中运行
public void onEventMainThread(ResponseEvent responseEvent) {
//渲染数据
//responseEvent.result;
}
来源:http://www.cnblogs.com/liyangguang/p/3893313.html