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

      

  • 相关阅读:
    Shell脚本:使用rsync备份文件/目录
    如何在 CentOS 中设置 NTP 服务器
    NGINX引入线程池 性能提升9倍
    如何在Quagga BGP路由器中设置IPv6的BGP对等体和过滤
    如何使用Weave以及Docker搭建Nginx反向代理/负载均衡服务器
    在 Ubuntu 上配置高性能的 HHVM 环境
    在 Linux 中怎样将 MySQL 迁移到 MariaDB 上
    如何删除 Ubuntu 上不再使用的旧内核
    如何在 Arch Linux 中安装 DNSCrypt 和 Unbound
    在 CentOS 7 中安装并使用自动化工具 Ansible
  • 原文地址:https://www.cnblogs.com/liyangguang/p/3893313.html
Copyright © 2020-2023  润新知