android笔记【AsyncTask的应用】

在android中,异步操作可以使用多线程(Thread/Runnable)、Handler、AsyncTask。
其中AsyncTask需要继承android.os.AsyncTask,至少实现 doInBackground()和onPostExecute()。

例如:
[code=java]
import android.os.AsyncTask;
import android.util.Log;
import android.widget.ProgressBar;
import android.widget.TextView;


/*
* AsyncTask有三个泛型参数Params,Progress和 Result
*/

public class ProgressBarAsyncTask extends AsyncTask {

private TextView textView;
private ProgressBar progressBar;
final String TAG = "TAG_AsyncTask";

public ProgressBarAsyncTask(TextView textView,ProgressBar progressBar){
super();
this.textView = textView;
this.progressBar = progressBar;
Log.v(TAG,"构造");
}

// onPreExecute之后调用的方法,最主要的方法之一,
//主要业务应该在这个方法里执行 by wangc@20140424
@Override
protected String doInBackground(Integer... params){
Log.v(TAG,"doInBackground");
int i = 0 ;
for(i=10; i<=100; i+=10){
operator();
publishProgress(i);
}
return i + params[0].intValue() + "";
}

//调用异步方法后执行,这个也是最主要的方法之一,UI的更新主要是在这里
//这里的 s 异步方法执行后返回的结果 by wangc@20140424
@Override
protected void onPostExecute(String s){
Log.v(TAG,"onPostExecute");
textView.setText("异步操作执行结束:"+s);
}

//执行异步方法前执行 by wangc@20140424
@Override
protected void onPreExecute(){
Log.v(TAG,"onPreExecute");
textView.setText("开始执行异步线程");
}

//这个更新进度条的 by wangc@20140424
@Override
protected void onProgressUpdate(Integer... values){
Log.v(TAG,"onProgressUpdate");
int value = values[0];
progressBar.setProgress(value);
}


// 模拟延时 by wangc@20140424
public void operator(){
try{
Thread.sleep(1000);
}catch (Exception e){
e.printStackTrace();
}
}
}
[/code]


在调用时,创建一个ProgressBarAsyncTask的实例,调用 execute() 就会执行方法 doInBackground()

[code=java]
ProgressBarAsyncTask asyncTask = new ProgressBarAsyncTask(textView,progressBar);
asyncTask.execute(1000);//调用AsyncTask,会执行其中的doInBackground(),不能主动调用该方法
[/code]

完整例子
代码非原创,已忘记从哪位朋友的博客里下载的了,乌鸦稍做修改和添加注释。知情者请通知乌鸦添加原文出处。