0

对不起,我是新手,我到处找,我就是不明白。

Asynctask 需要 3 个参数;例如

但是这些参数有什么意义呢?

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

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

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

我很困惑。请帮忙!

4

3 回答 3

2

来自AsyncTask的文档

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

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

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

 private class MyTask extends AsyncTask<Void, Void, Void> { ... }
于 2013-07-10T15:54:10.393 回答
0

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

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

对于许多情况,人们会希望提供进度更新。例如,您可以使用 Float 类型来表示完成百分比,或者使用 Long 来表示从文件中读取的字节数,或者使用 String 来表示给用户的一般消息。您使用进度类型传递临时进度信息(考虑将文件上传到 Facebook 或下载文件,它会在其中更新通知状态与进度 - 这就是您执行此操作的位置/方式)。你说过你不关心你的情况,所以使用 Void 并且不要费心实现任何进度方法。

最后,当任务完成时,您需要在 onPostExecute 中获取结果。所以你的 doInBackground 将返回一个值(这种类型的),AsyncTask 框架会将它传递给 onPostExecute。同样,这对于没有进一步正文的匿名类更有意义。如果您在班级成员中保留任何结果,那也很好(但没有必要)。如果您不需要在完成时执行任何操作,或者不需要传递任何数据,请使用 Void(并从 doInBackground 返回 null)。我发现至少为“成功完成或失败”返回一个布尔值是很有用的,这样您就拥有了该信息(这可能会影响您发布成功还是失败通知,因为任务完成通知是常见的 onPostExecute 操作)。

希望通过示例进行更多解释会有所帮助。

于 2013-07-10T16:18:27.473 回答
0

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

异步任务 | 安卓开发者

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

  1. Params,执行时发送给任务的参数类型。
  2. 进度,在后台计算期间发布的进度单元的类型。
  3. Result,后台计算结果的类型。

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

    private class MyTask extends AsyncTask<Void, Void, Void> { ... }
于 2013-07-10T15:59:32.787 回答