package company.zzw.john.threadtest;
import android.app.ProgressDialog;
import android.os.AsyncTask;
import android.widget.Toast;
/**
* Created by john on 2016/4/3.
*/
/**
* Params------第一个泛型参数设置为Void,表示在执行AsyncTask的时候不需要传入参数给后台任务
* Progress----I---第二个泛型参数设置为Integer,表示使用整型数据作为进度显示单位
* result-----第三个泛型参数设置为Boolean,表示使用布尔型数据来反馈执行结果
*/
public class DownloadTask extends AsyncTask<Void, Integer, Boolean> {
@Override
protected void onPreExecute() {
//这个方法会在后台任务执行之前进行调用,用于进行一些界面上的初始化操作,比如添加一个进度对话框
progressDialog.show();//显示进度对话框
}
@Override
protected Boolean doInBackground(Void... params) {
//这个方法中所有的代码都会在子线程中运行,在这里进行处理一些耗时的任务,任务一旦完成就
// 可以通过返回return语句来将任务的执行结果返回,如果AsyncTask的第三个泛型参数设置为Void
//就可以不返回执行结果,注意这个方法是不允许进行UI操作的,如果需要更新UI元素,比如反馈当前
//任务的执行进度。可以调用PublishProgress(Progress...)方法来完成。
try {
while (true){
int downloadPercent =doDownloas();
publishProgress(downloadPercent);
if (downloadPercent>=100){
break;
}
}
}catch (Exception e){
e.printStackTrace();
}
return true;
}
@Override
protected void onProgressUpdate(Integer... values) {
//当在后台任务中调用了PublishProgress(Progress...)方法后,这个方法很快就被调用,
// 方法中携带的参数就是在后台任务中传递来的,在这个方法中可以对UI进行操作,利用参数中的
// 数值即可以对界面元素进行相应的更新
ProgressDialog.setMessage("Download"+values[0]+"%");
}
@Override
protected void onPostExecute(Boolean result) {
//当后台任务执行完毕并通过rerturn语句进行返回时,这个方法就会被调用。返回的数据会作为参数传递
// 到这个方法中,可以利用返回的数据进行一些Ui操作,比如提醒任务执行的结果,以及关闭进度对话框
progressDialog.dismiss();//关闭进度对话框
//在这里提醒任务执行结果
if (result){
//提示成功
}else {
//提示失败
}
super.onPostExecute(aBoolean);
}
}
AsyncTask详解
最新推荐文章于 2024-05-06 10:13:13 发布