Android中提供了一种轻量级的异步通信的方法:AsyncTast类(接口)。可以使用AsyncTast
完成一些简单的多线程的操作,而不需要使用Thread
或者Handler
。
使用的方法很简单,只需要继承AsyncTast类,指定类型参数,并重写其中的doInBackground()
方法和其它几个回调方法。
下面是一个简单的例子:
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));
// Escape early if cancel() is called
if (isCancelled()) break;
}
return totalSize;
}
protected void onProgressUpdate(Integer... progress) {
setProgressPercent(progress[0]);
}
protected void onPostExecute(Long result) {
showDialog("Downloaded " + result + " bytes");
}
}
当子类创建以后,可以调用它的execute()
方法来开始执行
new DownloadFilesTask().execute(url1, url2, url3)
AsyncTast
有三个类型参数,分别代表传入参数的类型,发布进度的类型和返回值的类型。
doInBackground()
中是后台所需要执行的工作。它的参数对应着第一个参数类型,即execute()
传入的参数。
常用的回调方法有两个,一个是onPostExecute()
,用来返回执行的结果,它的参数对应这第三个参数类型,也就是doInBackground()
的返回值。;另外一个是onProgressUpdate()
,用来发布执行的进度,使用publishProgress()
方法来触发,它的参数对应着第二个参数类型。