volley 学习笔记1--发送请求

 一、概览

 

Volley 具有以下优势:

  • 自动网络请求调度。

  • 多个并发网络连接。

  • 透明磁盘和具有标准 HTTP 缓存一致性的内存响应缓存。

  • 支持请求优先级。

  • 取消请求 API。您可以取消单个请求,也可以设置要取消的请求的时间段或范围。

  • 可轻松自定义,例如自定义重试和退避时间。

  • 强大的排序功能,让您可以轻松使用从网络异步提取的数据正确填充界面。

  • 调试和跟踪工具。

Volley 不适用于下载大量内容的操作或流式传输操作,因为在解析过程中,Volley 会将所有响应存储在内存中。对于下载大量内容的操作,请考虑使用 DownloadManager 等替代方法。

二、请求处理

2.1 发送请求

大体上讲,您可以通过创建 RequestQueue 并向其传递 Request 对象以使用 VolleyRequestQueue 管理用于运行网络操作、向缓存读写数据以及解析响应的工作器线程。请求负责解析原始响应,而 Volley 负责将已解析的响应调度回主线程以供传送。 

Volley 始终在主线程上传送已解析的响应。在主线程上运行便于使用接收的数据填充界面控件,因为您可以直接从响应处理程序随意修改界面控件。对于库提供的许多重要语义(特别是与取消请求相关的语义)来说,这尤为重要。

    final TextView textView = (TextView) findViewById(R.id.text);
    // ...

    // Instantiate the RequestQueue.
    RequestQueue queue = Volley.newRequestQueue(this);
    String url ="http://www.google.com";

    // Request a string response from the provided URL.
    StringRequest stringRequest = new StringRequest(Request.Method.GET, url,
                new Response.Listener<String>() {
        @Override
        public void onResponse(String response) {
            // Display the first 500 characters of the response string.
            textView.setText("Response is: "+ response.substring(0,500));
        }
    }, new Response.ErrorListener() {
        @Override
        public void onErrorResponse(VolleyError error) {
            textView.setText("That didn't work!");
        }
    });

    // Add the request to the RequestQueue.
    queue.add(stringRequest);
    
    

调用 add() 时,Volley 会运行一个缓存处理线程和一个网络调度线程池。将请求添加到队列后,缓存线程会拾取该请求并对其进行分类:如果该请求可以通过缓存处理,系统会在缓存线程上解析缓存的响应,并在主线程上传送解析后的响应。如果该请求无法通过缓存处理,则系统会将其放置到网络队列中。第一个可用的网络线程会从队列中获取该请求,执行 HTTP 事务,在工作器线程上解析响应,将响应写入缓存,然后将解析后的响应发送回主线程以供传送。

请注意,阻塞 I/O 和解析/解码等开销大的操作都是在工作器线程上完成的。您可以添加来自任意线程的请求,但响应始终会在主线程上传送。

2.2 取消请求

需取消请求, Request 对象上调用 cancel()。取消请求后,Volley 可以确保您的响应处理程序永远不会被调用。 一个标记对象与每个请求相关联。然后,使用该标记提供要取消的请求范围的所有请求。

    public static final String TAG = "MyTag";
    StringRequest stringRequest; // Assume this exists.
    RequestQueue requestQueue;  // Assume this exists.

    // Set the tag on the request.
    stringRequest.setTag(TAG);

    // Add the request to the RequestQueue.
    requestQueue.add(stringRequest);
    
    @Override
    protected void onStop () {
        super.onStop();
        if (requestQueue != null) {
            requestQueue.cancelAll(TAG);
        }
    }
    

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值