Android 解耦利器 EventBus

  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;

        }
相關文章
相關標籤/搜索