使用凌空时如何保持进度条状态?

时间:2013-12-19 16:39:03

标签: android

当我使用带有片段回调的AysncTask时,很容易保持进度条状态,但是我应该如何用凌空来实现它?我可以使用AsyncTask因为它已经过时而且凌空更好更快。 任何帮助或提示都将不胜感激。

我使用谷歌的截击发布和获取请求

4 个答案:

答案 0 :(得分:19)

我认为这里存在误解。

首先,Volley比AsyncTask更快。

这是比较苹果和橘子。他们都使用线程。 Volley线程并不比异步任务中的线程快。队列是分开的,但这是关于它的。在API 11&允许您使用自己的线程池来处理AsyncTask个实例。

其次,更好地定义。

  • Volley旨在向服务器发送大量轻量级有效负载(GET / POST)并获得快速响应。然后呼叫者可以使用这些响应。

  • AsyncTask旨在完成UI线程中的给定任务,并提供有关该任务状态的各种回调。

对于您的ProgressBar我假设您正在尝试确定正在执行的请求的进度。在Volley世界中,因为预计它们很小,所以你有三个州。未开始,执行(也包含开始解析)和完成(包括成功,错误和取消等)。正如您所知AsyncTask使用onProgress时,publishProgress会回调一下。因此,您的实例可以定义它想要发送的任何内容,作为进度的指示。

如果你的有效载荷很大并且需要时间转移到服务器,那么Volley可能不合适。 Volley并没有做得很好,甚至没有尝试在服务器上发送大量有效负载。原因是这不是它的意思。就像它需要所有有效载荷,上传和接收完全适合内存。所以,如果你有一些全面的截击请求,并且每个请求有1MB的有效负载和1MB的响应,你可以看到这很快就加起来了。

Volley是一个很棒的图书馆,但请考虑建议使用它。阅读代码的文档和实现以获取更多信息。

如果您正在做一些需要相当长时间的事情,我会写一个特定的请求类型来发送和传输内容。这样你就可以知道请求还剩下多少工作。我假设你使用发送和接收的字节作为进度的衡量标准。

答案 1 :(得分:6)

您可以将一个侦听器添加到请求结束时执行的队列

            mRequestQueue.add(yourRequest);
            mRequestQueue.addRequestFinishedListener(new RequestQueue.RequestFinishedListener<String>() {
                @Override
                public void onRequestFinished(Request<String> request) {
                    if (progressDialog !=  null && progressDialog.isShowing())
                        progressDialog.dismiss();
                }
            });

答案 2 :(得分:5)

这是一个非常简单的修复。在你发出截击请求之前,请调用方法progress.show(),然后在你的响应中调用progress.dismiss()只是做了这个并且效果很好!

答案 3 :(得分:-1)

这很容易做到..请参阅下面的代码片段

sendJsonRequest(){

     ///ENABLE PROGRESS BAR HERE
    enableProgressBar();        
    JsonObjectRequest jsObjRequest = new JsonObjectRequest(Request.Method.GET, URL, null,

    new Response.Listener<JSONObject>() {
    @Override
    public void onResponse(JSONObject response) {
         hideProgressDialog();  
         System.out.println(response);
     }
    },
    new Response.ErrorListener() {
    @Override
    public void onErrorResponse(VolleyError error) {
         hideProgressDialog();
    }
    });
queue.add(jsObjRequest);

}