AsyncTask使用

一、AsyncTask概念

AsyncTask是一个异步任务类,用来异步执行耗时操作,更新UI线程。
实际是封装了Thead+Handler

二、优点:

简单,方便

三、缺点:

Task实例必须在主线程中创建
execute方法必须在主线程中调用,并且只能执行一次

四、使用方法:

创建一个类继承AsyncTask
覆写doInBackground(Params…) 后台执行耗时操作
覆写onPostExecute(Result) 执行耗时操作后更新UI界面,在主线程中执行
覆写onProgressUpdate(Progress…)更新进度条,在主线程中进行,结果来自于publishProgress(Integer)

下面是实例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
class MyAsyncTask extends AsyncTask<Integer, Integer,Integer>{

/**
* 这个方法当创建线程后执行,准备工作
*/
@Override
protected void onPreExecute() {
// TODO Auto-generated method stub
super.onPreExecute();

}
/**
* 这个方法执行耗时操作 这里是休眠
*/
@Override
protected Integer doInBackground(Integer... params) {
// TODO Auto-generated method stub
try {
/**
* 简单每睡眠1秒更新下进度
*/
// for (int i = 0; i < 10; i++) {
// Thread.sleep(1*1000);
// publishProgress(i);
// }


} catch (Exception e) {
// TODO: handle exception
}
return null;
}
/**
* 这个方法主线程中执行,耗时操作完之后执行
* 更新UI界面
*/
@Override
protected void onPostExecute(Integer result) {
// TODO Auto-generated method stub
super.onPostExecute(result);
/**
* 最后执行完耗时操作更新ui界面
*/
//drawCavas(surfaceHolder,10);

}
/**
* 这个方法在主线程调用
*/
@Override
protected void onProgressUpdate(Integer... values) {
// TODO Auto-generated method stub
super.onProgressUpdate(values);

/**
* 把进度更新到SurfaceView中
*/
//drawCavas(surfaceHolder,values[0]);
}


}