为什么,如何以及将哪些参数传递给 Asynctask<>,请在此处查看详细信息。我认为这是最好的解释。
谷歌的 Android 文档说:
异步任务由 3 个通用类型定义,称为 Params、Progress 和 Result,以及 4 个步骤,称为 onPreExecute、doInBackground、onProgressUpdate 和 onPostExecute。
AsyncTask 的泛型类型:
异步任务使用的三种类型如下:
Params,执行时发送给任务的参数类型。进度,在后台计算期间发布的进度单元的类型。Result,后台计算结果的类型。并非所有类型都始终由异步任务使用。要将类型标记为未使用,只需使用类型 Void:
private class MyTask extends AsyncTask<Void, Void, Void> { ... }
您可以进一步参考:http: //developer.android.com/reference/android/os/AsyncTask.html
或者您可以通过参考 Sankar-Ganesh 的博客来明确 AsyncTask 的作用
那么典型的 AsyncTask 类的结构是这样的:
private class MyTask extends AsyncTask<X, Y, Z>
protected void onPreExecute(){
}
该方法在启动新线程之前执行。没有输入/输出值,因此只需初始化变量或您认为需要做的任何事情。
protected Z doInBackground(X...x){
}
AsyncTask 类中最重要的方法。您必须将您想要在后台执行的所有内容放在与主线程不同的线程中。这里我们有一个类型为“X”的对象数组作为输入值(你在标题中看到了吗?我们有“...extends AsyncTask”这些是输入参数的类型)并从该类型返回一个对象“Z”。
受保护的无效onProgressUpdate(Y y){
此方法使用方法 publishProgress(y) 调用,通常在您想在主屏幕中显示任何进度或信息时使用,例如在后台显示您正在执行的操作进度的进度条。
受保护的无效 onPostExecute(Z z){
} 该方法在后台操作完成后调用。作为输入参数,您将收到 doInBackground 方法的输出参数。
X、Y 和 Z 类型呢?
从上面的结构可以推断:
X – The type of the input variables value you want to set to the background process. This can be an array of objects.
Y – The type of the objects you are going to enter in the onProgressUpdate method.
Z – The type of the result from the operations you have done in the background process.
我们如何从外部类调用此任务?只需以下两行:
MyTask myTask = new MyTask();
myTask.execute(x);
其中 x 是 X 类型的输入参数。
一旦我们的任务运行起来,我们就可以从“外部”找到它的状态。使用“getStatus()”方法。
myTask.getStatus(); 我们可以收到以下状态:
RUNNING - 表示任务正在运行。
PENDING - 表示任务尚未执行。
FINISHED - 表示 onPostExecute(Z) 已完成。
关于使用 AsyncTask 的提示
不要手动调用 onPreExecute、doInBackground 和 onPostExecute 方法。这是系统自动完成的。
您不能在另一个 AsyncTask 或 Thread 中调用 AsyncTask。方法 execute 的调用必须在 UI Thread 中完成。
onPostExecute 方法在 UI 线程中执行(在这里你可以调用另一个 AsyncTask!)。
任务的输入参数可以是一个对象数组,这样你就可以放置你想要的任何对象和类型。