一.基本介绍
1.继承AsyncTask抽象类的泛型参数含义
(1)第一个参数Params:执行AsyncTask需要传入的参数,可用于后台任务中使用。
(2)第二个参数Progress:显示后台执行任务进度的进度单位类型。
(3)第三个参数Result:任务执行之后,需要对任务结果进行返回,这里是返回结果的类型。
例如:
class DemoAsyncTask extends AsyncTask<Void,Integer,Boolean>
表示(1)执行AsyncTak时,不需要传入参数给到执行后台任务;(2)进度条的显示单位是整型;(3)返回结果用布尔类型值进行表示。
2.内部方法解释
(1)onPreExecute()方法
// 作用:执行 线程任务前的操作
@Override
protected void onPreExecute() {
// 可以做一些View的初始化显示操作
//例如开始做后台任务的时候设置textview的值提醒后台任务开始了
}
(2)doInBackground()方法
// 作用:接收输入参数、执行任务中的耗时操作、返回线程任务执行的结果
@Override
protected String doInBackground(String... params) {
//执行后台任务,并且返回结果
}
(3)onProgressUpdate()方法
// 作用:在主线程 显示线程任务执行的进度
@Override
protected void onProgressUpdate(Integer... progresses) {
//可以设置UI界面的进度条
}
(4)onPostExecute()方法
// 作用:接收线程任务执行结果、将执行结果显示到UI组件
@Override
protected void onPostExecute(String result) {
// 执行完毕后,更新UI等操作,例如重新设置textview的值提示已经任务结束
}
(5)onCancelled()方法
// 作用:将异步任务设置为:取消状态
@Override
protected void onCancelled() {
//设置取消状态之后的操作,例如改变UI界面的一些显示信息
}
二.demo举例
介绍:布局中有一个点击进行后台任务的按钮,有对应的提示的textview,有一个显示后台任务进度的进度条,有一个取消任务的按钮。
public class MainActivity extends AppCompatActivity {
MyTask mTask;
Button button,cancel; // 加载、取消按钮
TextView text; // textview
ProgressBar progressBar; // 进度条
private class MyTask extends AsyncTask<String, Integer, String> {
@Override
protected void onPreExecute() {
// 执行前textview显示“加载中”
text.setText("加载中");
}
@Override
protected String doInBackground(String... params) {
try {
int count = 0;
int length = 1;
while (count<999) {
count += length;
// 之后将执行onProgressUpdate()
publishProgress(count);
// 模拟耗时任务
Thread.sleep(50);
}
}catch (InterruptedException e) {
e.printStackTrace();
}
return null;
}
@Override
protected void onProgressUpdate(Integer... progresses) {
progressBar.setProgress(progresses[0]);//取第一个
}
@Override
protected void onPostExecute(String result) {
// 执行完毕后,则更新textview的显示值
text.setText("加载完毕");
}
@Override
protected void onCancelled() {
text.setText("已取消");
progressBar.setProgress(0);
}
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
button = (Button) findViewById(R.id.button);
cancel = (Button) findViewById(R.id.cancel);
text = (TextView) findViewById(R.id.text);
progressBar = (ProgressBar) findViewById(R.id.progress_bar);
//创建任务
mTask = new MyTask();
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
/**
* a. 必须在UI线程中调用
* b. 同一个AsyncTask实例对象只能执行1次,若执行第2次将会抛出异常
*/
mTask.execute();
}
});
cancel = (Button) findViewById(R.id.cancel);
cancel.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// 取消一个正在执行的任务,onCancelled方法将会被调用
mTask.cancel(true);
}
});
}
}
本文详细介绍了AndroidAsyncTask的泛型参数含义,包括Params、Progress和Result,以及内部的onPreExecute、doInBackground、onProgressUpdate、onPostExecute和onCancelled方法的用途。通过一个示例演示了如何在Activity中使用AsyncTask进行后台任务并显示进度。

763

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



