AsyncTask异步任务
AsyncTask是Android中用于实现异步操作的一种工具,它可以在UI线程中完成耗时任务,而不会阻塞主线程。它可以把任务分成几个步骤,每个步骤可以在不同的线程中完成,以提高效率。
使用方法
AsyncTask是一个抽象类,使用它可以实现异步任务,它有3个泛型参数:
- Params:它是执行任务时需要传入的参数类型
- Progress:它是执行任务时进度的类型
- Result:它是执行任务后的返回结果的类型
使用AsyncTask需要重写它的几个方法:
- onPreExecute():该方法将在后台任务开始执行之前被调用,用于进行一些UI操作,如显示进度条。
- doInBackground(Params... params):该方法中的参数就是在execute(Params... params)中传入的,在该方法中可以执行后台任务,每次调用publishProgress()方法都会触发onProgressUpdate(Progress... values)方法,该方法中携带的参数就是publishProgress()方法中携带的参数。
- onProgressUpdate(Progress... values):该方法在UI线程中被调用,用于显示进度信息。
- onPostExecute(Result result):该方法在doInBackground(Params... params)执行完后被调用,这里的result就是doInBackground(Params... params)的返回值,用于更新UI。
实用示例
public class MyAsyncTask extends AsyncTask{ private TextView textView; public MyAsyncTask(TextView textView) { this.textView = textView; } @Override protected void onPreExecute() { // 执行前显示提示 textView.setText("loading..."); } @Override protected String doInBackground(String... params) { // 假设这是耗时任务 try { Thread.sleep(3000); } catch (InterruptedException e) { e.printStackTrace(); } return "Complete"; } @Override protected void onProgressUpdate(Integer... values) { // 更新进度 textView.setText("loading..." + values[0]); } @Override protected void onPostExecute(String result) { // 执行完毕 textView.setText(result); } }
使用AsyncTask可以很方便的实现异步任务,它可以把任务分成几个步骤,每个步骤可以在不同的线程中完成,以提高效率。