当我使用带有片段回调的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是一个很棒的图书馆,但考虑一下它的用途.阅读代码的文档和实现以获取更多信息.
如果你正在做一些需要相当长时间的事情,我会编写一个特定的请求类型来发送和传输内容.这样你就可以知道请求还剩下多少工作.我假设你使用发送和接收的字节作为进度的衡量标准.
您可以向请求结束时执行的队列添加侦听器
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)