为什么,如何以及将哪些参数传递给Asynctask <>,请参见此处的详细信息。我认为这是最好的解释。
Google的Android文档说:
异步任务由3个通用类型(称为Params,Progress和Result)以及4个步骤(称为onPreExecute,doInBackground,onProgressUpdate和onPostExecute)定义。
AsyncTask的通用类型:
异步任务使用的三种类型如下:
参数,执行时发送给任务的参数类型。进度,后台计算期间发布的进度单位的类型。结果,背景计算结果的类型。并非所有类型都总是由异步任务使用。要将类型标记为未使用,只需使用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”这是输入参数的TYPES)并返回该类型的对象“ Z”。
受保护的void onProgressUpdate(Y y){
}此方法使用publishProgress(y)方法调用,通常在想要在主屏幕上显示任何进度或信息时使用,例如,进度条显示在后台进行的操作的进度。
受保护的void 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-表示任务正在运行。
待处理-表示任务尚未执行。
已完成-表示onPostExecute(Z)已完成。
有关使用AsyncTask的提示
不要手动调用onPreExecute,doInBackground和onPostExecute方法。这是系统自动完成的。
您不能在另一个AsyncTask或线程内调用AsyncTask。方法execute的调用必须在UI线程中完成。
方法onPostExecute在UI线程中执行(在这里您可以调用另一个AsyncTask!)。
任务的输入参数可以是一个对象数组,这样您就可以放置所需的任何对象和类型。