我对AsyncTask中的get(long, java.util.concurrent.TimeUnit)
函数感到好奇,但是我很难找到它的用法示例。
get(long, java.util.concurrent.TimeUnit)
任何人都可以提供一个使用它的例子吗?
答案 0 :(得分:15)
似乎AsyncTask.get()
阻止了调用者线程,AsyncTask.execute()
没有。
您可能希望将AsyncTask.get()
用于要测试特定Web Service调用的测试用例,但不需要它是异步的,并且您希望控制完成所需的时间。或者,您希望在测试套件中测试您的Web服务。
语法与execute:
相同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);
答案 1 :(得分:4)
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");