AsyncTask的使用
AsyncTask是个抽象类,因此需要创建继承它的具体类。具体类必需实现doInBackground()抽象方法,这是AsyncTask唯一的抽象方法。很多具体类也常会重写onPostExecute()方法,用来处理执行结果。
?
使用AsyncTask可以使代码清析整洁,它将工作线程代码与UI线程代码分离。
?
示例:
/*AsyncTask的三个泛型参数说明(三个参数可以是任何类型)第一个参数:传入doInBackground()方法的参数类型第二个参数:传入onProgressUpdate()方法的参数类型第三个参数:传入onPostExecute()方法的参数类型,也是doInBackground()方法返回的类型。*/public class DownloadFileTask extends AsyncTask<String, Integer, Long> {/** * 此方法在独立线程(双叫工作线程)中执行 */protected Long doInBackground(String... urls) {Long totalSize = 0;for (int i = 0; i < urls.length; i++) {totalSize += downloadFile(urls[i]);publishProgress((int)((i / (float)urls.length) * 100));//通知UI线程调用onProgressUpdate()方法}return totalSize;}/** * 此方法在UI线程中执行 */protected void onProgressUpdate(Integer... progress) {setProgressPercent(progress[0]);}/** * 此方法在UI线程中执行 */protected void onPostExecute(Long totalSize) {showDialog("Downloaded " + totalSize + " bytes");}}?
?
使用规则:
1.实例必需用UI线程创建
2.实例的execute()方法必需用UI线程调用
3.不要手动调用onPreExecute()、onPostExecute()、doInBackground()和onProgressUpdate方法
4.实例只能执行一次(execute()方法),如果尝试调第二次将会抛异常
?