Volley

Volley使用

创建请求队列

//此RequestQueue是属于专属的activity的,因此需要一个context
RequestQueue mQueue = Volley.newRequestQueue(getApplicationContext());

创建请求

StringRequest

//为StringRequest的构造器,需要请求方法,URL,请求成功监听器,请求失败监听器
public StringRequest(int method, String url, Listener<String> listener, ErrorListener errorListener) {
        super(method, url, errorListener);
        this.mListener = listener;
    }
//创建StringRequest示例
StringRequest mStringRequest = new StringRequest(Request.Method.GET, "https://www.baidu.com",
                new Response.Listener<String>() {
                    @Override
                    public void onResponse(String response) {//请求成功的处理
                        Log.d(TAG, response);
                    }
                }, new Response.ErrorListener() {
            @Override
            public void onErrorResponse(VolleyError error) {//请求失败的处理
                Log.e(TAG, error.getMessage(), error);
            }
        });

StringRequest

使用方法同上

ImageRequest

//示例代码
ImageRequest imageRequest = new ImageRequest(//已经弃用
                "https://www.wanandroid.com/blogimgs/bb4937de-b6f3-4c7e-b7d0-66d02f54abee.jpeg",
                new Response.Listener<Bitmap>() {
                    @Override
                    public void onResponse(Bitmap response) {
                        iv_image.setImageBitmap(response);
                    }
                }, 0, 0, Bitmap.Config.RGB_565, new Response.ErrorListener() {
            @Override
            public void onErrorResponse(VolleyError error) {
                iv_image.setImageResource(R.drawable.ico_default);
            }
        });

将请求添加到队列中

mQueue.add(mStringRequest);
mQueue.add(mJsonObjectRequest);
mQueue.add(imageRequest);

使用ImageLoader加载图片

内部依然使用ImageRequest实现,构造方法传入一个ImageCache对象用于缓存图片,同时避免重复连接。
还可以设置默认显示图片以及加载错误图片。

ImageLoader imageLoader = new ImageLoader(mQueue, new BitmapCache());
        //Listener参数(ImageView,默认图片,错误图片),也可以设置最大宽度和最大高度
        ImageLoader.ImageListener listener = ImageLoader.getImageListener(iv_image, R.drawable.ico_default, R.drawable.ico_default);
        imageLoader.get("https://www.wanandroid.com/blogimgs/bb4937de-b6f3-4c7e-b7d0-66d02f54abee.jpeg", listener);

使用NetworkImageView加载图片

与ImageLoader不同的是,本方式是将NetworkImageView当做空间来使用,而ImageLoader是将图片资源加载进入控件中。

        ImageLoader imageLoader = new ImageLoader(mQueue, new BitmapCache());
        nv_image.setDefaultImageResId(R.drawable.ico_default);
        nv_image.setErrorImageResId(R.drawable.ico_default);
        nv_image.setImageUrl("https://www.wanandroid.com/blogimgs/bb4937de-b6f3-4c7e-b7d0-66d02f54abee.jpeg", imageLoader);

源码分析

  1. 创建访问队列
    根据Android系统版本来确定用HttpURLCollection还是HttpClient,然后再调用队列的start()方法。
  2. 创建线程
    创建5个线程(1个缓冲调度线程+4个网络调度线程)
public void start() {
        stop(); 
        mCacheDispatcher = new CacheDispatcher(mCacheQueue, mNetworkQueue, mCache, mDelivery);
        mCacheDispatcher.start();//创建缓冲线程完毕

        for (int i = 0; i < mDispatchers.length; i++) {
            NetworkDispatcher networkDispatcher = new NetworkDispatcher(mNetworkQueue, mNetwork,
                    mCache, mDelivery);
            mDispatchers[i] = networkDispatcher;
            networkDispatcher.start();
        }//创建网络调度线程完毕
    }
  • 添加请求
    首先通过执行request.shouldCache()方法判断request是否应该缓存,默认情况下是true,也就是所有的请求默认都要缓存。如果request不需要缓存的话,把请求放进网络请求队列,如果request需要缓存那就放进缓存队列。添加到各自的队列中,然后缓存线程和网络调度线程分别处理两个队列。
  • CacheDispatcher工作流程
    判断请求是否被取消,如果请求没有被取消则判断是否存在缓存,如果存在并且没有过期,则将响应回调给主线程;如果没有,则将请求添加在网络调度线程中。
  • NetworkDispatcher工作流程
    网络调度线程也是不断地从队列中取出请求并且判断该请求是否被取消了。如果该请求没有被取消,就去请求网络。请求网络时调用Network的performRequest()方法。
    调用成功之后会将响应结果存在缓存中,并且调用this.mDelivery.postResponse(request,volleyError1)回调给主线程。
    如果响应成功将会执行Request的deliverResponse方法,并把响应结果传进去,如果响应失败,就执行deliverError方法,并把响应失败的对象传进去。
  • 监听器更新
    通过之前重写的访问成功和失败的监听器进行主线程的响应更新。
    在这里插入图片描述

注:

优点

  • 自动的调度网络请求
  • 多并发的网络请求
  • 可以缓存http请求
  • 支持请求的优先级
  • 支持取消请求的API,可以取消单个请求,可以设置取消请求的范围域。
  • 代码标准化,使开发者更容易专注于我们的业务的逻辑处理
  • 更容易给UI填充来自网络请求的数据,通过Handler进行通信
  • 缺点
  • 非常不适合大的文件流操作,例如上传和下载。因为Volley会把所有的服务器端返回的数据在解析期间缓存进内存。
  • 只支持http请求
  • 图片加载性能一般
  • 默认开启了5个线程,可以通过使用线程池进行线程管理,不至于资源浪费。
数据治理是确保数据准确性、可靠性、安全性、可用性和完整性的体系和框架。它定义了组织内部如何使用、存储、保护和共享数据的规则和流程。数据治理的重要性随着数字化转型的加速而日益凸显,它能够提高决策效率、增强业务竞争力、降低风险,并促进业务创新。有效的数据治理体系可以确保数据在采集、存储、处理、共享和保护等环节的合规性和有效性。 数据质量管理是数据治理中的关键环节,它涉及数据质量评估、数据清洗、标准化和监控。高质量的数据能够提升业务决策的准确性,优化业务流程,并挖掘潜在的商业价值。随着大数据和人工智能技术的发展,数据质量管理在确保数据准确性和可靠性方面的作用愈发重要。企业需要建立完善的数据质量管理和校验机制,并通过数据清洗和标准化提高数据质量。 数据安全与隐私保护是数据治理中的另一个重要领域。随着数据量的快速增长和互联网技术的迅速发展,数据安全与隐私保护面临前所未有的挑战。企业需要加强数据安全与隐私保护的法律法规和技术手段,采用数据加密、脱敏和备份恢复等技术手段,以及加强培训和教育,提高安全意识和技能水平。 数据流程管理与监控是确保数据质量、提高数据利用率、保护数据安全的重要环节。有效的数据流程管理可以确保数据流程的合规性和高效性,而实时监控则有助于及时发现并解决潜在问题。企业需要设计合理的数据流程架构,制定详细的数据管理流程规范,并运用数据审计和可视化技术手段进行监控。 数据资产管理是将数据视为组织的重要资产,通过有效的管理和利用,为组织带来经济价值。数据资产管理涵盖数据的整个生命周期,包括数据的创建、存储、处理、共享、使用和保护。它面临的挑战包括数据量的快速增长、数据类型的多样化和数据更新的迅速性。组织需要建立完善的数据管理体系,提高数据处理和分析能力,以应对这些挑战。同时,数据资产的分类与评估、共享与使用规范也是数据资产管理的重要组成部分,需要制定合理的标准和规范,确保数据共享的安全性和隐私保护,以及建立合理的利益分配和权益保障机制。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值