AsyncTask 封装了新建子线程用于做耗时操作,并提供了子线程与UI线程的信息互动的方法;
使用方法:
- 创建一个类MyAsyncTask 继承于AsyncTask,并重写四个重要的方法;
//AsyncTask<Params,Progress,Result>是带泛型的类,Param为要传入AsyncTask的参数类型,Progress为任务执行的进度类型,Result是任务需要返回的结果类型,下面案列中,将传入string类型的参数,进度用integer类型值,返回一个Bitmap的类型;
public class DownloadAsyncTask extends AsyncTask<String, Integer, Bitmap> {
@Override
//在UI主线程中调用,主要是用于子线程开始前的准备工作,如UI的准备等
protected void onPreExecute() {
progressBar.setVisibility(View.VISIBLE);
}
@Override
//在UI主线程中调用,主要是用于子线程完成任务后的对返回结果的处理逻辑,及UI的变化等
protected void onPostExecute(Bitmap bitmap) {
progressBar.setVisibility(View.GONE);
imageView.setImageBitmap(bitmap);
}
@Override
//在子线程中完成的任务逻辑,String...params为传入的可变长的String类型的数组
protected Bitmap doInBackground(String... params) {
String st0 =params[0]//传入的第一个String参数
for(int i= 0 ;i<10;i++){
publishProgress(i);//可以传入多个指定进度类型的参数
}
...业务逻辑...
return bitmap;
}
@Override
//在UI主线程中调用,用于记录子线程完成任务的进度(在doInBackground()方法中调用 publicProgress(object...objects)方法才能触发此方法的调用),当进度值发生变化时,系统会自动在主线程中调用该方法
@Override
protected void onProgressUpdate(Integer... values) {
int i = values[0];//第一个进度值参数
}
/**
* 这四个方法的调取顺序和位置:(这些方法是系统自动调用的,不需要我们手动调用)
* onPreExecute()(UI主线程中)——> doInBackground()(子线程中)——> onPostExecut()(UI主线程中)
* |
* publicProgress()(doInBackground()方法中)
* |
* onProgressUpdate()(UI主线程中)
**/
- 在Activity中的方法中调用AsyncTask:
MySyncTask task = new MySyncTask();
task.execute(string1)//可传入多个参数,