0

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

这里有完整的代码。

onLocationChanged在第 530 行

我的AsyncTask在第 290 行

调用requestSingleUpdate的函数在第 197 行

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

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

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

4

2 回答 2

0

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

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

于 2013-07-07T16:34:17.607 回答
0

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

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

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

于 2013-07-07T16:48:12.967 回答