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); } }
相关文章推荐
- 读写Word的组件DocX介绍与入门
- accept函数
- 编译安装 Centos 7 x64 + tengine.2.0.3 (实测+笔记)
- NYOJ 16 矩形嵌套
- 林语堂名著全集
- org.apache.jasper.JasperException: /mainpage.jsp (line: 25, column: 2) According to TLD or attribute
- [Java]不同包的类之间的继承
- 第五章 springboot + mybatis
- 模板方法模式和外观模式
- 《构建之法》第四章读后感
- windows下编译ZThread-2.3.2
- 5-26 单词长度 (15分)
- mac 升级vim
- BestCoder Round #78 (div.2)_A_ CA Loves Stick
- oracle ocp 学习day6总结(oracle 启动过程与参数文件)
- J2EE 日志错误
- 仿AcFun 投食香蕉界面
- 位图的实现
- LintCode 删除排序链表中的重复元素
- ROS msg