java - 在 Android 中发出异步 HTTP 请求是否有公认的最佳实践?

标签 java android http

我见过很多例子,它们似乎都以不同的方式解决了这个问题。基本上我只想要最简单的方法来发出不会锁定主线程并且可以取消的请求。

我们(至少)有 2 个 HTTP 库可供选择,java.net.*(例如 HttpURLConnection)和 org.apache.http.* 也无济于事。

对于最佳实践有什么共识吗?

最佳答案

Android 1.5 SDK 引入了一个新类 AsyncTask旨在使在后台线程上运行任务并将结果传达给 UI 线程更简单一些。 Android Developers Blog 中给出的示例给出了如何使用它的基本思路:

public void onClick(View v) {
   new DownloadImageTask().execute("http://example.com/image.png");
}

private class DownloadImageTask extends AsyncTask {
   protected Bitmap doInBackground(String... urls) {
      return loadImageFromNetwork(urls[0]);
   }

   protected void onPostExecute(Bitmap result) {
      mImageView.setImageBitmap(result);
   }
}

doInBackgroundThread 方法在单独的线程(由线程池 ExecutorService 管理)上调用,结果将传递给 onPostExecute 方法它在 UI 线程上运行。您可以在 AsyncTask 子类上调用 cancel(boolean mayInterruptIfRunning) 来取消正在运行的任务。

至于使用 java.netorg.apache.http 库进行网络访问,这取决于您。我发现 java.net 库在简单地尝试发出 GET 并读取结果时使用起来非常愉快。 org.apache.http 库将允许您使用 HTTP 执行几乎任何您想做的事情,但它们可能更难使用,我发现它们不能执行以及(在 Android 上)对于简单的 GET 请求。

关于java - 在 Android 中发出异步 HTTP 请求是否有公认的最佳实践?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/828280/

相关文章:

java - 与可能会或可能不会回复的系统集成

java - EJB3 - @Column(insertable ="false") 问题

android - 通过 wifi 调试保持清醒

Android:默认在 SD 卡上安装我的应用程序

Java:如何异步发出http请求?

java - 如何在 Java 中从 wsdl 文件运行 Web 服务

java - "java *classname*"当我导入某些东西时不工作

java - 将 ArrayList<customtype> 转换为 CharSequence[]

java - 在这种情况下,我们需要使用 HttpClient 和其他网络服务

android - 无法生成签名的 apk? [发生重复平台类错误]