AsyncTask使用demo异步执行任务使用
/**
* 加载文件的异步任务。
*/
public class LoadFilesTask extends AsyncTask<String, String, Boolean> {
private Context mContext;
public LoadFileTask(Context context) {
mContext = context;
}
@Override
public void onPreExecute() {
// 在异步任务开始前提示用户。
Toast.makeText(mContext, "开始加载文件", Toast.LENGTH_SHORT).show();
}
@Override
public Boolean doInBackground(String... params) {
String file1 = params[0];
String file2 = params[1];
String file3 = params[2];
boolean isSuccess = true;
// 加载第一个文件,并且通知用户当前加载的文件名称。
publishProgress("File1");
isSuccess = isSuccess && loadFile(file1);
// 加载第二个文件,并且通知用户当前加载的文件名称。
publishProgress("File2");
isSuccess = isSuccess && loadFile(file2);
// 加载第三个文件,并且通知用户当前加载的文件名称。
publishProgress("File3");
isSuccess = isSuccess && loadFile(file3);
// 返回文件加载结果。
return isSuccess;
}
@Override
public void onProgressUpdate(String... values) {
// 提示用户当前在加载的是哪个文件。
String fileName = values[0];
String message = "正在加载文件:" + fileName;
Toast.makeText(mContext, message, Toast.LENGTH_SHORT).show();
}
@Override
public void onPostExecute(Boolean result) {
// 在异步任务结束的时候根据不同的加载结果提示用户。
boolean isSuccess = result;
if (isSuccess) {
Toast.makeText(mContext, "成功加载所有文件", Toast.LENGTH_SHORT).show();
} else {
Toast.makeText(mContext, "加载文件失败", Toast.LENGTH_SHORT).show();
}
}
}
注意:new出来这个对象后,
使用有两种
对象.executeOnExecutor(Executor, Params...)
使用我们自定义的线程池异步执行
或者
对象.execute()
使用async自带的线程池(不过注意里是默认是串行执行的,你new再多对象也是一个一个执行,想要并行执行就用第一个方法我们自己创建的线程池)