您的位置:首页 > 其它

AsyncTask详解

2016-04-03 16:07 246 查看
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);
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: