测序asynctasks

时间:2011-12-26 23:04:55

标签: android android-asynctask

我知道http请求应该作为AsyncTask的一部分运行,以使其远离UI线程。但是,可能需要多个和顺序的http请求的情况如何,后者的http请求依赖于更早的,因此需要按顺序运行?

在这种情况下,最好将后面的AsyncTasks放在早期AsyncTasks的onPostExecute中,以使它们按顺序运行吗?

或者这表明我的做法是错误的吗?

2 个答案:

答案 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
    }
}