使用AsyncTask跟新进度条
在Android中是不允许在子线程中跟新UI的,解决这个问题的主要方法有两种:
1、Handler
2、AsyncTask
现在就来讲解AsyncTask跟新进度条的例子
AsyncTask的构造函数中有三个参数
第一个参数:表示传递到doInBackground中的参数
第二个参数:表示传递到onProgressUpdate中的参数
第三个参数:表示doInBackground的返回值
对AsyncTask中几个比较常用的函数进行解释:
doInBackground :表示在后台运行的代码,主要用于执行比较耗时的任务,比如从网络下载数据
onPreExecute:表示在execute方法之前执行
onPostExecute:表示在execute方法后面执行
onProgressUpdate:主要用来跟新UI的
publishProgress:一般在doInBackground调用,从而调用onProgressUpdate
下面将我跟新ProgressBar的代码贴上:
public class MyTask extends AsyncTask<ProgressBar, Integer,Integer>{//用于保存UI上面的进度条private ProgressBar bar;@Overrideprotected Integer doInBackground(ProgressBar... params){// TODO Auto-generated method stubSystem.out.println("doinbackground=====>"+Thread.currentThread().getName());bar=params[0];int i=0;for(;i<=bar.getMax();i++){bar.setProgress(i);try{//通过调用此方法,从而调用onProgressUpdatethis.publishProgress(i);Thread.sleep(1000);} catch (InterruptedException e){// TODO Auto-generated catch blocke.printStackTrace();}}return i;}@Overrideprotected void onCancelled(){// TODO Auto-generated method stubsuper.onCancelled();}@Overrideprotected void onPostExecute(Integer result){// TODO Auto-generated method stubsuper.onPostExecute(result);System.out.println("postExecute=====>"+Thread.currentThread().getName());}@Overrideprotected void onPreExecute(){// TODO Auto-generated method stubsuper.onPreExecute();System.out.println("preExecute=====>"+Thread.currentThread().getName());}@Overrideprotected void onProgressUpdate(Integer... values){// TODO Auto-generated method stubSystem.out.println("onprogressUpdate=====>"+Thread.currentThread().getName());super.onProgressUpdate(values);bar.setProgress(values[0]);}}