AsyncTask
很多时候,需要异步执行任务,例如更新UI必须在主线程,internet任务必须在单独线程,
所以,从网上读取图片,然后显示,这么一个很简单的任务,就必须使用异步才能完成。
有一个简单的执行异步的类叫AsyncTask,提供一些便利的方法来执行异步任务。
- 建立一个自定义类,继承AsynkTask
- 覆盖类中的方法,以实现功能(具体如下)
- 在UI线程中创建该自定义类的实例,然后调用excute()方法
- 如果需要手动退出,调用cancel()方法
class MyAsync extends AsyncTask<Integer,Integer,String> {
TextView textView;
ImageView imageView;
ProgressBar progressBar;
public MyAsync(TextView tv,ImageView iv,ProgressBar pb) {
this.textView = tv;
this.imageView = iv;
this.progressBar = pb;
}
@Override
protected String doInBackground(Integer... integers) {
return String.valueOf(integers[0]);
}
@Override
protected void onProgressUpdate(Integer... values) {
super.onProgressUpdate(values);
}
@Override
protected void onPostExecute(String s) {
super.onPostExecute(s);
progressBar.setProgress(50);
textView.setText(s);
}
}
如上所示,这里面有3个主要方法
doinbackground,就是在新线程实现功能的方法,返回值就是需要获得的内容
onprogressupdate,就是在上述方法可能是一个很耗时的方法,这里可以用来更新UI显示运行进度,
所以里面可以设置一些在UI上显示进度的功能,自动调用。
onpostexcute,就是第一个方法在运行结束以后调用的,参数就是第一个方法的返回值。
很好理解吧。
一个AsyncTask实例智能调用一次,否则会抛出异常