【问题标题】:LocationListener onLocationChanged is not always called in DashClock extensionDashClock 扩展中并不总是调用 LocationListener onLocationChanged
【发布时间】:2013-07-23 20:43:05
【问题描述】:

我有一个 DashClock 扩展,可以通过单击它或按时间间隔刷新,所以我使用的是 AsyncTask。我还使用 LocationListener 因为我需要用户的位置。 有时,onLocationChanged 不会触发导致我的扩展程序无法更新,我为此工作了两周,现在尝试了不同的方法,但没有任何效果。

我有完整的代码here

onLocationChanged在第 530 行

我的 AsyncTask 在第 290 行

调用requestSingleUpdate的函数在第197行

我很确定这是一个线程问题,但我不知道如何解决它......

如果您需要更多详细信息,我很乐意提供。

编辑:我终于弄明白了,是我的 AsyncTask 在获得新位置之前就死了,所以我更改了天气更新逻辑,它现在可以工作了!

【问题讨论】:

    标签: android android-asynctask locationlistener looper dashclock


    【解决方案1】:

    问题可能与此有关(来自developer.android):

    首次引入时,AsyncTask 是在单个后台线程上串行执行的。从 DONUT 开始,这被更改为允许多个任务并行运行的线程池。从 HONEYCOMB 开始,任务在单线程上执行,以避免并行执行导致的常见应用程序错误。

    如果您尝试同时使用多个 RefreshWeatherTask,您可能会遇到问题。解决这个问题的一种方法是覆盖 onPostExecute 方法并包含一些可以保证 AsyncTask 完成的代码。

    【讨论】:

    • 感谢您的回答,它促使我找到了解决方案。 AsyncTask 没有完成的想法让我思考了一下,我意识到它为什么不起作用。
    • 没问题,很高兴能帮到你!
    【解决方案2】:

    这是很多代码(我没有阅读全部),但我可以告诉你,在这种情况下不需要AsyncTask。无需“等待后台线程中的更新”,这就是您使用侦听器的原因。你似乎也有很多不必要的标志和整个事情的逻辑。我的预感是你在监听器有机会更新你之前就禁用了它。

    我相信我会更简单地启用位置监听器(不仅仅是“一次”),等待“足够好”的位置,然后停止监听器。对于所有这些,您只需要对侦听器的引用不为空(因此您可以在完成后取消注册)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-01-20
      • 1970-01-01
      • 2013-03-22
      • 2017-01-29
      • 1970-01-01
      • 2012-06-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多