zoukankan      html  css  js  c++  java
  • Android 解耦利器 EventBus

      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;
    
            }
    

      

  • 相关阅读:
    BZOJ 3251 树上三角形:LCA【构成三角形的结论】
    BZOJ 2442 [Usaco2011 Open]修剪草坪:单调队列优化dp
    2018湖南省赛选拔
    扩展BSGS-传送门
    倒数第N个字符串
    HDU-6070 Dirt Ratio(二分+线段树+分数规划)
    第一场多校
    HDU5923-Prediction-有继承味道的并查集
    POJ2516费用流
    POJ3436:ACM Computer Factory-最大流
  • 原文地址:https://www.cnblogs.com/liyangguang/p/3893313.html
Copyright © 2011-2022 走看看