Andorid 開發過程當中總會遇到各個模塊耦合問題,使用EventBus是一種解耦方式。
java
EventBus 源代碼下載地址 https://github.com/greenrobot/EventBusgit
若是一個ListView展現的內容須要到網絡上請求該數據,那麼該業務須要以下幾個步驟:github
1.發送請求拼裝URL---> 網絡
2.發送請求--> app
3.獲得數據---> ide
4.渲染數據post
//使用傳統的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; }