首页 > 代码库 > Android 解耦利器 EventBus

Android 解耦利器 EventBus

  Andorid 开发过程中总会遇到各个模块耦合问题,使用EventBus是一种解耦方式。

  EventBus 源代码下载地址 https://github.com/greenrobot/EventBus

 

  如果一个ListView展示的内容需要到网络上请求该数据,那么该业务需要如下几个步骤:

1.发送请求拼装URL--->

2.发送请求-->

3.得到数据--->

4.渲染数据

       //使用传统的Handler和线程         final Integer GET_DATA= http://www.mamicode.com/1001;"";                //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;        }