使用排球时如何保持进度条状态?

当我使用具有分段callback的AysncTask时,保持进度条状态是容易的,但是我应该如何通过抽象实现呢? 我可以不使用AsyncTask,因为它已经过时了,而且sorting更好更快。 任何帮助或提示将不胜感激。

我正在使用谷歌齐射发布和获取请求

Solutions Collecting From Web of "使用排球时如何保持进度条状态?"

我认为这里有一些误解。

首先,sorting比AsyncTask快。

这是比较苹果和橙子。 他们都使用线程。 排气线程并不比asynchronous任务中的线程更快。 队列是分开的,但就是这样。 在API 11及更高版本中,您可以使用自己的线程池作为AsyncTask实例。

其次,定义更好。

  • Volley被devise用来发送很多轻的有效负载(GET / POST)给服务器并且得到相当快速的响应。 这些响应可以被调用者使用。

  • AsyncTask被devise为从UI线程完成一个给定的任务,并提供关于该任务状态的各种callback。

对于您的ProgressBar我假设您要么正在尝试确定正在执行的请求的进度。 在排球世界,因为这些预计会很小,你几乎有3个州。 未开始,执行(也包含开始parsing)和完成(由成功,错误和取消等组成)。 正如你所知道的,在使用publishProgress时,有一个onProgress的callbackpublishProgress 。 所以你的实例可以定义任何想要发送的东西来表示进度。

如果您的有效负载很大,并需要时间传输到服务器,那么Volley可能不合适。 Volley并不擅长工作,甚至无法在服务器上发送大量的有效负载。 原因是这不是它的意思。 就像它要求所有有效载荷,上传和接收完全适合内存。 所以,如果你有几个抽签要求,每个都有一个1MB的有效载荷和一个1MB的响应,你可以看到这很快就会加起来。

Volley是一个伟大的图书馆,但是考虑一下它被推荐用于什么。 阅读代码的文档和实现以获取更多信息。

如果你正在做的事情要花费相当长的时间,我会写一个特定的请求types来发送和传送内容。 这样你就可以知道请求还剩多less工作。 我假设你正在使用发送和接收的字节作为进度的措施。

这是一个非常简单的修复。 在进行抽象请求之前,调用方法progress.show(),然后在你的响应中调用progress.dismiss()。

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

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

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

 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); }