Android 解耦利器 EventBus

ε祈祈猫儿з 提交于 2019-11-27 20:25:23

  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;

        }

  

 

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!