我正在寻找“正确”的方法来修复用户的位置作为一次性任务。目前,我的执行流程大致是:
- 用户按下按钮。
- 处理程序(包含在主Activity代码中)向系统注册 GPS 位置侦听器,设置为尽快更新,启动ASyncTask并完成。
- 执行前,ASyncTask生成一个 ProgressDialog,有效地阻止任何其他 UI 使用。
- 对于它的后台任务,ASyncTask等待超时或 GPS 定位。
- 执行后,如果找到位置,ASyncTask要么向用户显示一些相关数据,否则在 toast 中显示错误。当然,它也会注销监听器。
现在,虽然这有效,但也有许多缺点。首先,很明显,在发出请求时,与应用程序的所有其他 UI 交互都会被阻止。目前这还不算太糟糕,因为应用程序的主要功能是执行此任务,并且在它工作时没有太多其他事情可做 - 它还可以阻止用户向按钮发送垃圾邮件。此外,我不确定 ASyncTask 的执行后阶段是否真的是放置我的位置发现逻辑的地方(它会拨打互联网电话,这本身在 ASyncTask 中可能会更好?)。但是,我不确定如何将已找到位置以及主线程应该做某事的事实传回。
我希望有人能告诉我这样做的“正确”方法 - 即使用这样的 ASyncTask 是正确的,是否涉及服务,以及我应该如何处理找到的互联网呼叫后定位),甚至可能给出一些明智的话,说明一般如何处理必须进行某种“阻塞”调用的应用程序的控制流。
如果需要,我可以提供代码,可能需要一些时间才能将其缩减为最低限度的解决方案。