• Android开发之AsyncTask的使用


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

    Params   调用execute时传入的参数,

    Progress  需要显示的进度信息

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

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

    代码实现 

    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

  • 相关阅读:
    silverlight通过WCF访问SQLserver示例
    PRISM ‘VS100COMNTOOLS’ not set. Cannot set the build environment
    定义了重复的“system.web.extensions/scripting/scriptResourceHandler”节
    silverlight+WCF之Hello world
    Java基础——注释规范
    Java基础—JDK环境变量配置
    Java基础—异常
    Java基础—面向对象
    Java基础—基础语法与常用命令
    Eclipse添加Junit测试
  • 原文地址:https://www.cnblogs.com/android100/p/Android-AsyncTask-use.html
Copyright © 2020-2023  润新知