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

Rah*_*pta 9 android

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

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

Gre*_*lli 19

我认为这里存在误解.

首先,Volley比AsyncTask更快.

这是比较苹果和橘子.他们都使用线程.Volley线程并不比异步任务中的线程快.队列是分开的,但这是关于它的.在API 11及更高版本中,您可以使用自己的线程池AsyncTask实例.

其次,定义更好.

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

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

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

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

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

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


Jch*_*Pal 6

您可以向请求结束时执行的队列添加侦听器

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


Ted*_*son 5

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