向AsyncTask添加参数的目的是什么?

时间:2013-07-10 15:51:54

标签: android android-asynctask

对不起,作为一个新手,我到处寻找,我只是不明白。

Asynctask需要3个参数;例如

但这些参数有什么意义?

我正在尝试在一个单独的线程中运行一个地理编码器,我有这个

private class GetCurrentCity extends AsyncTask<String, Void, Void>{

但我确实提出了这些参数。我不知道我应该放在那里。除了doInBackground()中已经存在的代码行之外,我不需要将进度条或任何东西转移到其他线程。然后我需要从那里返回一个字符串,我正在使用onPostExecute(String returnedAddress)。

我很困惑。求救!

3 个答案:

答案 0 :(得分:2)

来自AsyncTask

的文件

异步任务使用的三种类型如下:

  • 参数,执行时发送给任务的参数类型。
  • 进度,在此期间发布的进度单元的类型 背景计算。
  • 结果,后台计算结果的类型

并非所有类型都始终由异步任务使用。要将类型标记为未使用,只需使用类型Void:

 private class MyTask extends AsyncTask<Void, Void, Void> { ... }

答案 1 :(得分:0)

当你想在执行时传递一些东西或在runInBackground和onPostExecute之间传递时,这些是你想要的。您可以简单地在类声明中创建所有三个Void。

AsyncTask | Android Developers

异步任务使用的三种类型如下:

  1. Params,执行时发送给任务的参数类型。
  2. 进展,期间发布的进度单位的类型 背景计算。
  3. 结果,背景计算结果的类型。
  4. 并非所有类型都始终由异步任务使用。要将类型标记为未使用,只需使用类型Void:

        private class MyTask extends AsyncTask<Void, Void, Void> { ... }
    

答案 2 :(得分:0)

这是一个更多的描述,而不是API参考。首先,很多人会使用AsyncTask inline作为匿名类;记在脑子里。看起来你已经使用自己的类扩展它(这完全没问题),但它可能意味着你在构造函数中传递必要的数据并将其作为类变量引用。在这种情况下,一些论点不会有多大意义。

所以想象一下AsyncTask的匿名内联类。它要做的第一件事是在后台运行一些处理。为此,您需要一种方法将数据传递给doInBackground方法(因为您没有构造函数来调用并传递数据)。所以第一个参数是你要传递给它的数据类型。如果您不必传递任何内容,请使用Void,或者使用Object或任何其他内容,因为它必须是方法签名的一部分,但无论如何您都会忽略它。

在许多情况下,人们会希望提供进度更新。例如,您可以使用Float类型表示完成百分比,或者使用Long表示从文件读取的字节,或使用String表示向用户发送的常规消息。您可以使用进度类型传递临时进度信息(考虑将文件上传到Facebook或下载文件,它会根据进度更新通知状态 - 这是您在何处/如何执行此操作)。你已经说过在你的情况下你不关心它,所以使用Void并且不要打扰实现任何进度方法。

最后,当任务完成时,您需要获取onPostExecute中的结果。所以你的doInBackground将返回一个值(这种类型),AsyncTask框架将它传递给onPostExecute。同样,这对于没有更多主体的匿名类更有意义。如果您在班级成员中持有任何结果,那也没关系(但不必要)。如果您不需要完成任何操作,或者不需要传递任何数据,请使用Void(并从doInBackground返回null)。我发现至少返回“已成功完成或失败”的布尔值是有用的,因此您可以获得该信息(这可能会影响您是否发布成功或失败通知,因为任务完成的通知是常见的onPostExecute操作)。 / p>

希望通过示例帮助更多解释。