AsyncTask
- AsyncTask是什么
- AsyncTask怎么用
- 需要实现的几个方法分别是什么,有什么用
- 什么是泛型参数
- 什么是长度可变的参数列表
- 案例解析——倒计时Demo
AsyncTask是什么
- AsyncTask时Android提供的轻量级(实现代码量少)的异步类。
- 为了降低异步通信的开发难道,提供了AsyncTask。
- AsyncTask直接继承于Object类,位于android.os包中。
- 使用AsyncTask可以忽略Looper,MessageQueue,Handler等复杂对象,更便捷地完成异步耗时操作。
AsyncTask怎么用
新建内部类继承AsyncTask——定义AsyncTask的三种泛型参数——重写dolnBackground抽象方法——重写onPreExecute方法——重写onProgressUpdate方法——重写onPostExecute方法——在需要启动的地方调用execute方法
需要实现的几个方法分别是什么,有什么用
onPreExecute:
异步任务开始执行时,系统最先调用此方法
此方法运行在主线程中,可以对控件进行初始化等操作
doInBackground:
执行完onPreExecute方法后,系统执行此方法
此方法运行在子线程中,比较耗时的操作放在此方法中执行
onProgressUpdate:
显示当前进度,适用于下载或扫描这类需要实时显示进度的需求
此方法运行在主线程中,可以修改控件状态,例如:显示百分比
触发此方法,需要在doinBackground中使用publishProgress方法
PublishProgress:
在DoInBackground中使用
用于触发onProgressUpdate方法
onPostExecute:
当异步任务执行完成后,系统会调用此方法
此方法运行在主线程中,可以修改空间状态,例如:下载完成
什么是泛型参数
广泛、泛泛的意思,也就是什么类型都包括在内。
什么是长度可变的参数列表
格式是类型后面加…,例如String…、Object…等
也就是说是一个可延伸的参数
案例解析——倒计时Demo
public class Main3Activity extends AppCompatActivity implements View.OnClickListener{
private TextView daojishi_tv;
private Button daojishi_but;
int count=10;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main3);
bindID();
}
private void bindID() {
daojishi_tv=findViewById(R.id.daojishi_tv);
daojishi_but=findViewById(R.id.daojishi_but);
daojishi_but.setOnClickListener(this);
}
@Override
public void onClick(View v) {
new DownloadTask().execute();
}
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();
}
}
return "下载完成";
}
@Override
protected void onProgressUpdate(String... values) {
super.onProgressUpdate(values);
daojishi_tv.setText(values[0]);
}
@Override
protected void onPostExecute(String s) {
super.onPostExecute(s);
daojishi_tv.setText(s);
}
}
}
<TextView
android:id="@+id/daojishi_tv"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"/>
<Button
android:id="@+id/daojishi_but"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="开始倒计时"
android:layout_gravity="center"
/>