Подтвердить что ты не робот

Ищите хороший пример использования get() с AsyncTask в android

Мне нравится функция get(long, java.util.concurrent.TimeUnit) в AsyncTask, но мне трудно найти пример ее использования.

get (long, java.util.concurrent.TimeUnit)

Может ли кто-нибудь указать пример использования?

4b9b3361

Ответ 1

Кажется, что AsyncTask.get() блокирует поток вызывающего, где AsyncTask.execute() нет.

Возможно, вы захотите использовать AsyncTask.get() для тестовых случаев, в которых вы хотите протестировать определенный вызов веб-службы, но вам не нужно, чтобы он был асинхронным, и вы хотите контролировать, сколько времени потребуется для завершения. Или в любое время, когда вы хотите протестировать веб-службу в тестовом пакете.

Синтаксис совпадает с исполнением:

private class DownloadFilesTask extends AsyncTask<URL, Integer, Long> {
 protected Long doInBackground(URL... urls) {
     int count = urls.length;
     long totalSize = 0;
     for (int i = 0; i < count; i++) {
         totalSize += Downloader.downloadFile(urls[i]);
         publishProgress((int) ((i / (float) count) * 100));
     }
     return totalSize;
 }

 protected void onProgressUpdate(Integer... progress) {
     setProgressPercent(progress[0]);
 }

 protected void onPostExecute(Long result) {
     showDialog("Downloaded " + result + " bytes");
 }
}

new DownloadFilesTask().get(5000, TimeUnit.MILLISECONDS);

Ответ 2

Другое использование AsyncTask - это знать, когда обрабатывались несколько AsyncTasks:

AsyncTask1 a1 = new AsyncTask();
AsyncTask1 a2 = new AsyncTask();

a1.execute();
a2.execute();

a1.get();
a2.get();

Log.d("Example", "a1 and a2 have both finished, you can now proceed");