排气和AsyncTask

我读了一篇关于Volley的文章,我知道这是一个很棒的networking图书馆。 但是我不明白一件事。

所有的请求是asynchronous任务或不是?

当我想使用Volley发送asyncTask请求我需要在AsyncTask中放置Volley请求吗? 或者我应该只是打电话给Volley请求它已经是AsyncTask请求?

private class MyClass extends AsyncTask<String, Void, String> { @Override protected String doInBackground(String... params) { // do Volley request } } 

这是正确的方法?

您不需要在asynchronous任务上运行Volly请求。

为什么:

他们在不同的线程上pipe理所有networking相关的任务 如果你仔细观察图书馆项目,他们没有看到asynchronous的任务。 但他们智能地处理所有networking相关的任务有效。

检查Volly的主包中的RequestQueue.java

这里我正在粘贴java文档。

 /** * A request dispatch queue with a thread pool of dispatchers. * * Calling {@link #add(Request)} will enqueue the given Request for dispatch, * resolving from either cache or network on a worker thread, and then delivering * a parsed response on the main thread. */ 

编辑:

形成请求

随着Volley,networking通信由RequestQueuepipe理。 使用RequestQueue及其所有工具(尤其是caching)的最佳方法是通过实例化一次,并将其作为单例保存。 此时,您可以添加或取消请求,停止或启动请求,并访问响应caching。

 RequestQueue queue =Volley.newRequestQueue(this); 

一旦RequestQueue被实例化,就必须形成一个请求。 这可以利用Volley库中包含的几个不同的“开箱即用”请求类,或者通过将Volley的请求类扩展到您自己的自定义请求中来完成。 已经包含在Volley中的请求类是一个String请求,JSON请求和一个Image Request。 包含在Volley库中的大多数请求类都使用了与下面类似的构造函数。

传递给构造函数的参数:

RequestMethod(获取,发布,删除,等等) * JSONObject * – 一个可选的对象,将发布您的请求ResponseListener – 您的数据将在请求完成后的地方ErrorListener – 当您的请求有问题时会被告知。

 JsonObjectRequest request = JsonObjectRequest(Requestmethod, url, null, new ResponseListener(), new ErrorListener()); 

Listners接收回应:

成功的响应监听器

 private class ResponseListener implements Response.Listener{ @Override public void onResponse(JSONObject response){ } } 

错误响应监听器

 private class ErrorListener implements Response.ErrorListener{ @Override public void onErrorResponse(VolleyError error){ } } 

最后将你的请求添加到请求队列中,其余的永不妥协的任务将为你处理。

打电话:

现在,我们已经制作了我们的请求和响应类,我们准备将请求添加到队列中并检索数据。 为此,我们只需将请求添加到队列中。

 queue.add(request); 

然后将响应或错误传递给我们在请求中定义的响应/错误类。 您可以一次向队列中添加尽可能多的请求,并将响应传递到各自的响应/错误类别

当你使用Volley时,没有必要把它和AsyncTask结合起来。 它在另一个线程为你做networking的东西。

以下是使用Volley进行networking通话的一个基本示例。 正如你所看到的,所有的代码只是在Activity ,而不需要定义一个AsyncTask

排气不能插入AsyncTask内,因为,

Volley正在自己启动后台线程,所以所有的networking请求都是在UI线程中执行的,所以主要你不需要再扩展AsyncTask。 当然,你将不得不小心取消旋转或当用户退出您的活动时运行的请求..由于Volley主要用于在Android(主要用途DownloadManager)次要networking目的。 它做类似AsyncTask类的工作。 在Volley中实现Singleton。 图像也可以在Volley中发送。