1.概述:AsyncTask是一个轻量级的handler,用于执行单个异步任务时,简洁方便。当要执行多个任务时这handler更好。
2.使用:类的创建:
class ProgressBarAsyncTask extends AsyncTask<Integer, Integer, String>{
}//使用了泛型,三个类型第一个 指定了控制的参数的类型,第二个用来表示任务执行百分比的值的类型,第三个时要返回的结果的类型。
类实例使用:
ProgressBarAsyncTask asyncTask = new ProgressBarAsyncTask(textView, progressBar);//自定义构造方法,传入想要处理的参数
asyncTask.execute(第一种参数);//开始执行异步任务
3、内部方法:
方法要按照参数,返回值要按照格式使用,因为内部会相互调用这些方法
(1)@Override
protected String doInBackground(Integer... params) {。。。。}
这个就是用于后台执行的方法,相当于run()了,传入第一个类型的变长类型,返回值是上面的第三个参数, 结果类型
(2)
/**
* 在doInBackground方法执行结束之后在运行,并且运行在UI线程当中 可以对UI控件进行设置
* 这里的String参数对应AsyncTask中的第三个类型(也就是接收doInBackground的返回值)
*/
@Override
protected void onPostExecute(String result) {
Log.e("MYtag","异步操作结束;");
textView.setText("异步操作结束;"+result);
}
(3)
// 在doInBackground方法执行开始前在运行它,并且运行在UI线程当中 可以对UI控件进行设置
@Override
protected void onPreExecute()
{
textView.setText("开始执行线程");
}
(4)
/**
* 此方法也运行在UI线程中,用于onInbackground方法执行过程中控制UI中的progressBar,
* 在中onInbackground调用publishProgress(第一种类型)方法时,就会触发此方法的执行,
* 其参数即publishProgress传过来的,也是AsyncTask中的第二个参数
*/
@Override
protected void onProgressUpdate(Integer... values)
{
int value=values[0];
progressBar.setProgress(value);
}
4、使用事项:
(1)Task的实例必须在UI 线程中创建
(2)execute方法必须在UI 线程中调用
(3)该task只能被执行一次,否则多次调用时将会出现异常