- AsyncTask简介
除了使用Handler实现线程间的通信外,Android提供了一个工具类:AsyncTask,它使创建需要与用户界面交互的长时间运行的任务变得更简单。相对来说AsyncTask更轻量级一些,适用于简单的异步处理,不需要借助线程和Handler即可实现。
AsyncTask是抽象类。AsyncTask定义了三种范型类型Params,Progress和Result。
Params启动任务执行的输入参数,比如,HTTP请求的URL。
Progress 后台任务执行的百分比
Result 后台执行任务最终返回的结果,比如String
例子代码块
public class MainActivity extends AppCompatActivity {
private TextView textView_info;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
textView_info=findViewById(R.id.info);
}
public void asyncTaskClick(View v){
new MyAsyncTask(this).execute();
}
/**
* 通过一个AsyncTask实现一个异步任务
*/
private static class MyAsyncTask extends AsyncTask<String,Integer,String>{
private MainActivity activity;
public MyAsyncTask(MainActivity activity){
this.activity=activity;
}
//执行任务之前触发的事件方法,可以在该方法中做一些初始化工作
@Override
protected void onPreExecute() {
super.onPreExecute();
System.out.println("onPreExecute");
activity.textView_info.setText("开始执行任务...");
}
//执行后台任务的方法,类似于线程,所以不能在该方法中访问UI组件
@Override
protected String doInBackground(String... strings) {
for(int i=0;i<10;i++){
System.out.println(i);
publishProgress(i);//更新进度
try {
Thread.sleep(500);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
return "success";
}
//更新进度值
@Override
protected void onProgressUpdate(Integer... values) {
super.onProgressUpdate(values);
activity.textView_info.setText("当前的值为:"+values[0]);
}
//当doInBackground方法返回后被调用
@Override
protected void onPostExecute(String s) {
super.onPostExecute(s);
activity.textView_info.setText(s);
}
}
}
例子展示

本文介绍了Android中AsyncTask的使用方法,展示了如何利用AsyncTask进行异步处理,避免主线程阻塞,同时提供了完整的代码示例,包括任务执行前后的处理及进度更新。
850

被折叠的 条评论
为什么被折叠?



