我知道http请求应该作为AsyncTask的一部分运行,以使其远离UI线程。但是,可能需要多个和顺序的http请求的情况如何,后者的http请求依赖于更早的,因此需要按顺序运行?
在这种情况下,最好将后面的AsyncTasks放在早期AsyncTasks的onPostExecute中,以使它们按顺序运行吗?
或者这表明我的做法是错误的吗?
答案 0 :(得分:1)
如果您不必更新请求之间的UI,只需在doInBackground()
中依次执行它们并累积结果。完成后,只需返回并使用onPostExecute()
中的结果来更新UI。如果您确实需要更新用户界面,则可以在获得一些中间结果时调用publishProgress
并在onProgressUpdate()
中进行更新。
答案 1 :(得分:1)
要在队列中创建大量HTTPRequests,请尝试以下操作:
private class QueueExample extends AsyncTask<URL, InputStream, Long> {
protected Long doInBackground(URL... urls) {
SynchronousQueue<URL> queue = new SynchronousQueue<URL>();
for(URL url : urls){
queue.add(url);
}
for (URL url : queue) {
InputStream in = new BufferedInputStream(queue.take().openConnection().getInputStream());
publishProgress(in);
}
}
protected void onProgressUpdate(InputStream... progress) {
doSomethingWithStream(progress[0]);
//Do Something
}
protected void onPostExecute(Long result) {
//Finished
}
}