секвенирование асинктаза - PullRequest
       3

секвенирование асинктаза

2 голосов
/ 27 декабря 2011

Я понимаю, что http-запросы должны выполняться как часть AsyncTask, чтобы держать его вне потока пользовательского интерфейса.Но как насчет случая, когда может потребоваться несколько последовательных http-запросов, когда последние http-запросы зависят от более ранних и, следовательно, должны выполняться последовательно?

В этом случае лучше ли помещать последние AsyncTasks в onPostExecute предыдущих AsyncTasks, чтобы они запускались последовательно?

Или это указывает на то, что у меня неправильный подход?

Ответы [ 2 ]

1 голос
/ 02 января 2012

Чтобы сделать много HTTP-запросов в очереди, попробуйте следующее:

 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
    }
}
1 голос
/ 27 декабря 2011

Если вам не нужно обновлять интерфейс между запросами, просто выполняйте их один за другим в doInBackground() и накапливайте результаты. Когда закончите, просто вернитесь и используйте результат в onPostExecute() для обновления пользовательского интерфейса. Если вам нужно обновить пользовательский интерфейс, вы можете позвонить publishProgress, когда получите промежуточный результат и обновить в onProgressUpdate().

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...