简谈AsyncTask
1.AsyncTask是什么
AsyncTask:是Android提供的轻量级的异步类,可以忽略Looper,MessageQueue,Handler等复杂对象,更便捷的完成异步耗时操作
2.AsyncTask怎么用
共分为两步,自定义AsyncTask,在耗时的地方调用自定义的AsyncTask
1.
class DownloadTask extends AsyncTask<String,String,String>{
@Override
protected String doInBackground(String... strings) {
//这里写耗时操作
return null;
}
2.
@Override
protected void onPostExecute(String s) {
super.onPostExecute(s);
//输出异常处理结果
}
3.需要实现的几个方法分别是什么,有什么用
onPreExcute():在主线程中执行,在异步任务之前调用,系统最先调用此方法.可对控件进行初始化等操作
doInBackground():此方法运行在子线程中,比较耗时的操作放在此方法中执行
onProgressUpdate():此方法运行在主线程中,可以修改控件状态,获取任务的最新进度,触发此方法,需要在doInBackground中使用publishProgress方法
publishProgress:在doInBackground()中使用,用于触发onProgressUpdate()方法
onPostExcute():在异步任务执行完成后,系统会调用此方法,运行在主线程中,可以修改控件状态,用于接收异步任务的结果
4.什么是泛型参数
泛型参数就是可以接受任何形式的参数,不像int只能定义int类型的
什么是长度可变的参数列表
长度可变就是可以接收传过来多个参数,而不是像String str这种普通类型只能传一个
可变参数列表例如:String… str 接受传过来的多个参数返回的是一个数组,所以调用时需要像数组一样,如下面所示:values[0]
protected void onProgressUpdate(String... values) {
super.onProgressUpdate(values);
textView.setText(values[0]);
}
案例解析——倒计时Demo
布局文件简单就不发了,创建一个TextView和Button
java文件
创建了DownloadTask继承 AsyncTask
class DownloadTask extends AsyncTask<String,String,String>{
@Override
protected String doInBackground(String... strings) {
while (count>0){
publishProgress(count+"" );
count--;
try {
//每隔一秒刷新一次
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
//在倒计时完成后显示下载完成,可不写,直接返回null
return "下载完成";
}
@Override
protected void onProgressUpdate(String... values) {
super.onProgressUpdate(values);
textView.setText(values[0]);
}
@Override
protected void onPostExecute(String s) {
super.onPostExecute(s);
textView.setText(s);
}
}
count=10,模拟10秒倒计时
创建了DownloadTask文件后,在按钮button的单击事件中进行调用:
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
new DownloadTask().execute();
}
});
}