我见过很多例子,它们似乎都以不同的方式解决了这个问题。基本上我只想要最简单的方法来发出不会锁定主线程并且可以取消的请求。
我们(至少)有 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.net
或 org.apache.http
库进行网络访问,这取决于您。我发现 java.net
库在简单地尝试发出 GET
并读取结果时使用起来非常愉快。 org.apache.http
库将允许您使用 HTTP
执行几乎任何您想做的事情,但它们可能更难使用,我发现它们不能执行以及(在 Android 上)对于简单的 GET
请求。
关于java - 在 Android 中发出异步 HTTP 请求是否有公认的最佳实践?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/828280/