我希望找到“正确”的方法来修复用户的位置作为一次性任务。目前,我的执行流程大致是:
现在,虽然这有效,但仍有许多缺点。首先,很明显,在发出请求时,会阻止与应用程序进行的所有其他UI交互。目前这还不错,因为该应用程序的主要功能是执行此任务,并且在其工作时没有太多其他事情要做 - 它还会阻止用户发送垃圾邮件按钮。另外,我不确定ASyncTask的执行后阶段是否真的是放置我的位置找到逻辑的地方(它进行互联网调用,这本身可能在ASyncTask中更好?)。但是,我不确定如何传回已经找到位置并且主线程应该做某事的事实。
我希望有人可以告诉我这样做的“正确”方式 - 即使用ASyncTask这样正确,是否涉及到服务,以及我应该如何处理互联网呼叫后location-found),甚至可能会给出一些明智的说法来处理应用程序的控制流程,这些应用程序必须进行一些“阻塞”调用。
如果需要,我可以提供代码,可能需要一些时间才能将其缩减到最低限度的解决方案。
答案 0 :(得分:1)
通常应避免阻止调用和阻止UI。请参阅Reto Meier's take on the subject。
因此,我完全抛弃了AsyncTask
。禁用用户用来启动修复请求的Button
。使用postDelayed()
Runnable
作为超时机制。并且,允许用户做某事(阅读帮助等)。使用标题栏中的进度指示器指示您正在处理获取位置,在获得修复时或在超时发生时解除指示符。
(它会进行互联网通话,这本身可能会在ASyncTask中变得更好?)
当然不应该在主应用程序线程上完成。当位置修复进入时,启动AsyncTask
以获取数据。