0

首先,我知道 LocationManager 不必在 AsyncTask 中调用,因为它已经是非 UI 阻塞 :)

我有一个活动 1. 获取用户当前位置 2. 调用 Web 服务以检索该位置周围的特定 POI 列表。

用户可以选择使用 TabActivity 以地图或列表的形式查看结果。牢记这一点,获取用户位置和调用 web 服务的 AsyncTask 由 TabActivity 视图管理,而不是任何一个停靠视图。

所以我希望 TabActivity 启动一个 AsyncTask,它首先获取用户的位置,然后调用 web 服务。进度对话框可防止在此过程中使用选项卡切换视图。

除了从 AsyncTask 获取用户位置之外,几乎所有工作都在工作。编写 web 服务代码,编写映射和覆盖代码,任务进度对话框应对方向变化。

对位置的关注是速度而不是准确性。如果用户选择在地图视图上查看结果,那么我将提供一个“我的位置”按钮,以便获得更准确的位置。我只是想初步获得一个大致的位置并快速返回搜索结果。

也许我会以错误的方式解决这个问题。也许我应该显示地图视图,让地图活动找到当前位置,然后在异步中只调用 web 服务 - 但是如果用户在位置阶段点击列表视图选项卡怎么办?我还打算允许用户指定他们的默认视图——有些人可能更喜欢列表而不是地图。在这种情况下,我将有一个必须检索位置的列表视图。

感谢马丁的任何建议。

4

1 回答 1

0

我怀疑它。我遇到的问题是 AsyncTask 中没有调用 LocationListener。这样做的原因是,虽然我在线程中创建并准备了一个剪裁器,但我没有调用 Looper.Loop()

我启动 requestLocationUpdates,启动计时器。位置管理器以位置响应,或者计时器到期。此时我调用 looper.quit() 以确保一切恢复正常。

似乎正在工作。您还必须记住响应后退按钮等,如果 AsyncTask 被取消,则取消计时器和循环器。

于 2011-05-08T07:37:27.267 回答