直接正题~~~
AsyncTask的使用方法:
- 必须子类化AsyncTask(外部类实现AsyncTask或者匿名内部类)
- AsyncTask的实例只能执行异常(再次启动必须重新实例化)
- 启动任务必须在主线程中执行
//自定义外部类实现AsyncTask各个方法介绍
/**
* 关于AsyncTask当中三个泛型参数的使用:
* 1、Params:执行任务时传入的参数,多半情况下使用String类型作为参数,用于传入url地址
* 同时也是doInBackground()方法时的传入参数
* 2、Progress:在后台发布进度时使用的参数,调用publishProgress(Progress),同时也是
* onProgressUpdate()方法的传入参数
* 3、Result:doInBackground()方法的返回值,同时也是onPostExecute()方法的传入参数
* @author csx
*
*/
public class MyTask extends AsyncTask<Void, Void, Void> {
/**
* 在doInbackground()方法执行之前执行
* 当Task启动,首先执行该方法,该方法执行完毕立即调用doInBackground()方法
*/
@Override
protected void onPreExecute() {
// TODO Auto-generated method stub
super.onPreExecute();
Log.v("MyTask", "onPreExecute");
}
/**
* 该方法在onPreExecute()方法执行之后执行---=-后台(辅线程)
*/
@Override
protected Void doInBackground(Void... params) {//多参(数组)
//该方法在后台执行,主要用于发布进度,该方法被调用,键onProgressUpdate()方法被回调,否则将不会回调onProgressUpdate()方法
publishProgress();//手动调用
Log.v("MyTask", "doInBackground");
return null;
}
/**
* 该方法只有在publishProgress()方法被调用之后,被系统调用 UI --Thread
*/
@Override
protected void onProgressUpdate(Void... values) {
// TODO Auto-generated method stub
super.onProgressUpdate(values);
Log.v("MyTask", "onProgressUpdate");
}
/**
* 该方法在doInBackground()方法执行完毕后调用
*/
@Override
protected void onPostExecute(Void result) {
// TODO Auto-generated method stub
super.onPostExecute(result);
Log.v("MyTask", "onPostExecute");
}
}
实例化
//实例化
MyTask tsak = new MyTask();
//执行
task.execute();
Log打印如下图:
如图可看到log的打印情况,从而清楚各个方法的调用顺序。