AsyncTask 等待位置

Posted

技术标签:

【中文标题】AsyncTask 等待位置【英文标题】:AsyncTask to wait for Location 【发布时间】:2016-04-22 19:47:57 【问题描述】:

我有一个我无法理解的问题和概念。 我的应用程序根据当前位置从 Internet 获取信息。 信息在AsyncTask中获取。

我的问题是我不想在获得 GPS 坐标之前继续获取信息。

我有 GPS 服务,它工作正常并返回坐标。但是,我希望我的 AsyncTask 从 Internet 获取信息等到 GPS 坐标可用。

这也可以正常工作 - 在我的 GPS 的 AsyncTask 中,我启动了 serviceIntent 来获取我的坐标。但是 onPostExecute 不会等到我得到坐标并继续前进。

如何让 AsyncTask 等到坐标可用?

【问题讨论】:

【参考方案1】:

您不需要 AsyncTask 等到坐标可用。

在您的 AsyncTask 中,您查询 GPS 坐标,当您收到 GPS 坐标响应时,您可以启动另一个具有已知 GPS 坐标的 AsyncTask 向您的服务器发送请求并等待响应。

也许你不需要第一个AsyncTask,只需调用位置服务获取当前位置并在位置服务onLocationChanged()回调中启动AsyncTask。当定位失败(例如定位被禁用)时,您还需要进行错误处理。

如果你真的希望 onPostExecute()onLocationChanged() 之后被调用,你可以在 AsyncTask 的 onExecute() 中等待一个锁对象,在位置服务回调中,在等待对象上发送通知。

【讨论】:

不幸的是,我无法从 onLocationChange() 调用 AsyncTask。如何让 AsyncTask “监听”坐标? OnPostExecute() 在过程中间被调用 - 它不等待坐标。

以上是关于AsyncTask 等待位置的主要内容,如果未能解决你的问题,请参考以下文章

在主线程中等待 AsyncTask

等待 Google 在 AsyncTask 中放置照片请求

等待多个AsyncTask完成

让一个 AsyncTask 等待另一个完成?

Android AsyncTask 等待其他函数完成

在返回结果之前等待 AsyncTask.execute(()) 完成