我有一个DashClock扩展,可以通过点击它或按时间间隔刷新,所以我使用的是AsyncTask。我也使用LocationListener,因为我需要用户的位置。 有时,onLocationChanged不会触发导致我的扩展程序不更新,我现在尝试了两个星期,尝试了不同的方法,但没有任何方法可行。
我有完整的代码here。
onLocationChanged 位于第530行
我的 AsyncTask 位于第290行
调用 requestSingleUpdate 的函数位于第197行
我很确定这是一个线程问题,但我不知道如何解决它......
如果您需要更多详细信息,我将很乐意为您提供。
编辑:我终于明白了,在获得新位置之前,我的AsyncTask就已经死了,所以我改变了天气更新逻辑,现在就可以了!
答案 0 :(得分:0)
这是很多代码(我没有阅读所有代码),但我可以告诉你,在这种情况下不需要AsyncTask
。没有必要“等待后台线程中的更新”,这就是你使用监听器的原因。你似乎在整个事情中也有很多不必要的标志和逻辑。我的预感是你在有机会更新你之前就禁用了听众。
我相信我会更简单地启用位置监听器(不只是“一次”),等待“足够好”的位置,然后停止监听器。对于所有这些,您只需要对侦听器的引用不为null(因此您可以在完成后取消注册它)。
答案 1 :(得分:0)
问题可能与此有关(来自developer.android):
首次引入时,AsyncTasks在单个后台线程上串行执行。从DONUT开始,这被改为一个线程池,允许多个任务并行运行。从HONEYCOMB开始,任务在单个线程上执行,以避免由并行执行引起的常见应用程序错误。
如果您尝试同时使用多个RefreshWeatherTasks,则可能会遇到问题。解决这个问题的一种方法是覆盖onPostExecute方法,并包含一些可以保证AsyncTask完成的代码。