AsyncTask与ProgressDialog使用笔记(安卓在背景运行耗时任务)

时间:2014-02-09 15:23:22   收藏:0   阅读:435

AsyncTask用在需要在ui线程中调用、在背景线程中执行耗时任务、并且在ui线程中返回结果的场合。
下面就是一个在背景中运行的AsyncTask的实现DownloadDBTask, Android中实现了默认的进度提示对话框,即ProgressDialog,通过实例化和一些简单设置,就可以使用了。

  1. private class DownloadDBTask extends AsyncTask<String, Integer, String> {   
  2.         // 可变长的输入参数,与AsyncTask.exucute()对应   
  3.         ProgressDialog pdialog;   
  4.         public DownloadDBTask(Context context){   
  5.             pdialog = new ProgressDialog(context, 0);      
  6.             pdialog.setButton("取消", new DialogInterface.OnClickListener() {   
  7.              public void onClick(DialogInterface dialog, int i) {   
  8.               dialog.cancel();   
  9.              }   
  10.             });   
  11.             pdialog.setOnCancelListener(new DialogInterface.OnCancelListener() {   
  12.              public void onCancel(DialogInterface dialog) {   
  13.               finish();   
  14.              }   
  15.             });
  16.             pdialog.setTitle("第一次使用,正在下载数据...");
  17.             pdialog.setCancelable(true);   
  18.             pdialog.setMax(100);   
  19.             pdialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);   
  20.             pdialog.show();   
  21.         }
  22.         
  23.         @Override  
  24.         protected String doInBackground(String... params) {   
  25.             try{
  26.                     if (DataOper.GetTopNearestPOIs(1, mDBHelper).size()==0)
  27.                             DataOper.GetAllPtsFromNet(mDBHelper, pdialog); // 从网络上下载数据记录的功能
  28.             } catch(Exception e) {   
  29.                     e.printStackTrace();
  30.             }   
  31.             return null;
  32.         }
  33.   
  34.         @Override  
  35.         protected void onCancelled() {   
  36.             super.onCancelled();   
  37.         }   
  38.   
  39.         @Override  
  40.         protected void onPostExecute(String result) {   
  41.             pdialog.dismiss();    
  42.         }   
  43.   
  44.         @Override  
  45.         protected void onPreExecute() {
  46.         }   
  47.   
  48.         @Override  
  49.         protected void onProgressUpdate(Integer... values) {    
  50.         }  
  51.      }   
复制代码


对于写好的异步任务类,调用方法为:

  1. DownloadDBTask task = new DownloadDBTask(context);   
  2.         task.execute("");
复制代码
注意AsyncTask为泛型类,具有三个泛型参数,此处设计为 <String, Integer, String>,对应于运行参数、进度值类型和返回参数。
从sdk的文档中看到,当一个AsyncTask运行的过程中,经历了4个步骤:

原文:http://www.cnblogs.com/xiaochao1234/p/3535881.html

评论(0
© 2014 bubuko.com 版权所有 - 联系我们:wmxa8@hotmail.com
打开技术之扣,分享程序人生!