Android开发之AsyncTask的使用_移动开发_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > 移动开发 > Android开发之AsyncTask的使用

Android开发之AsyncTask的使用

 2013/11/22 12:27:15  安卓吧  博客园  我要评论(0)
  • 摘要:AndroidAPI3时引进了AsyncTask,也叫异步任务。使用它可以很方便的更新主线程中的UI,使用它比Handler、Thread更简单。由于AsyncTask是抽象类,要使用它首先要创建子类继承它。创建子类时需要三个泛型参数Params调用execute时传入的参数,Progress需要显示的进度信息Result任务执行完毕后doInBackground的返回值看下使用AsyncTask控制进度条的效果代码实现packagecom.example.asynctaskdemo
  • 标签:android 使用 开发 Android开发

Android API 3时引进了AsyncTask,也叫异步任务。使用它可以很方便的更新主线程中的UI,使用它比Handler、Thread更简单。由于AsyncTask是抽象类,要使用它首先要创建子类继承它。创建子类时需要三个泛型参数

Params   调用execute时传入的参数,

Progress  需要显示的进度信息

Result   任务执行完毕后doInBackground的返回值

看下使用AsyncTask控制进度条的效果

代码实现 

    class="dp-j" start="1">
  1. package com.example.asynctaskdemo;  
  2.   
  3. import android.app.Activity;  
  4. import android.os.AsyncTask;  
  5. import android.os.Bundle;  
  6. import android.view.View;  
  7. import android.view.View.OnClickListener;  
  8. import android.widget.Button;  
  9. import android.widget.ProgressBar;  
  10.   
  11. /** 
  12.  * AsyncTask的简单使用 
  13.  *  
  14.  * @author Administrator 
  15.  *  
  16.  */  
  17. public class MainActivity extends Activity {  
  18.   
  19.     private ProgressBar pro = null;  
  20.     private Button start = null;  
  21.     private Button stop = null;  
  22.     private boolean isExe = false;  
  23.   
  24.     @Override  
  25.     protected void onCreate(Bundle savedInstanceState) {  
  26.         super.onCreate(savedInstanceState);  
  27.         setContentView(R.layout.main);  
  28.         pro = (ProgressBar) findViewById(R.id.progress);  
  29.         start = (Button) findViewById(R.id.start);  
  30.         stop = (Button) findViewById(R.id.stop);  
  31.         final UpdatePro updatePro = new UpdatePro();  
  32.         // 开始任务  
  33.         start.setOnClickListener(new OnClickListener() {  
  34.   
  35.             @Override  
  36.             public void onClick(View v) {  
  37.                 // TODO Auto-generated method stub  
  38.                 if (!isExe) {  
  39.                     // 一个任务只能被执行一次,否则会报异常  
  40.                     updatePro.execute();  
  41.                     isExe = true;  
  42.                 }  
  43.             }  
  44.         });  
  45.         // 结束任务  
  46.         stop.setOnClickListener(new OnClickListener() {  
  47.   
  48.             @Override  
  49.             public void onClick(View v) {  
  50.                 // TODO Auto-generated method stub  
  51.                 if (isExe) {  
  52.                     updatePro.cancel(true);  
  53.                 }  
  54.             }  
  55.         });  
  56.     }  
  57.   
  58.     /** 
  59.      * 更新UI线程 
  60.      *  
  61.      * @author Administrator 
  62.      *  
  63.      */  
  64.     class UpdatePro extends AsyncTask<Void, Integer, Boolean> {  
  65.   
  66.         private int downloadPercent = 0;  
  67.   
  68.         /** 
  69.          * 核心的操作 
  70.          */  
  71.         @Override  
  72.         protected Boolean doInBackground(Void... params) {  
  73.             // TODO Auto-generated method stub  
  74.             try {  
  75.                 while (true) {  
  76.                     downloadPercent = downloadPercent + 10;  
  77.                     // 把数据传给onProgressUpdate更新UI  
  78.                     publishProgress(downloadPercent);  
  79.                     if (downloadPercent >= 300) {  
  80.                         //downloadPercent = 0;  
  81.                         break;  
  82.                     }  
  83.                     System.out.println("----- downloadPercent = "  
  84.                             + downloadPercent);  
  85.                     Thread.sleep(10000);  
  86.                 }  
  87.             } catch (Exception e) {  
  88.                 return false;  
  89.             }  
  90.             return true;  
  91.         }  
  92.   
  93.         /** 
  94.          * 获取doInBackground返回的结果 
  95.          */  
  96.         @Override  
  97.         protected void onPostExecute(Boolean result) {  
  98.             // TODO Auto-generated method stub  
  99.             System.out.println("--------------onPostExecute " + result);  
  100.             super.onPostExecute(result);  
  101.         }  
  102.   
  103.         /** 
  104.          * 最先执行 初始化工作 
  105.          */  
  106.         @Override  
  107.         protected void onPreExecute() {  
  108.             // TODO Auto-generated method stub  
  109.             System.out.println("--------------onPreExecute");  
  110.             pro.setProgress(0);  
  111.             super.onPreExecute();  
  112.         }  
  113.   
  114.         /** 
  115.          * 得到publishProgress传入的值,更新UI 
  116.          */  
  117.         @Override  
  118.         protected void onProgressUpdate(Integer... values) {  
  119.             // TODO Auto-generated method stub  
  120.             System.out.println("--------------onProgressUpdate  " + values[0]);  
  121.             pro.setProgress(values[0]);  
  122.             super.onProgressUpdate(values);  
  123.         }  
  124.   
  125.     }  
  126. }  


Demo下载:http://files.cnblogs.com/android100/AsyncTaskDemo.zip

发表评论
用户名: 匿名