0

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

onLocationChanged上线530

的AsyncTask上线290

调用requestSingleUpdate上线197

我敢肯定这是一个线程函数问题,但我不知道如何解决它...

如果你需要任何更多细节我会很乐意为他们提供。

编辑:我终于明白了,这是我的AsyncTask在新的位置可以被获取之前死亡,所以我改变了天气更新逻辑,现在它的作品!

回答

0

问题可能与此(从developer.android):

当首次引入AsyncTasks物连续在单个后台线程执行。从DONUT开始,将其更改为允许多个任务并行操作的线程池。从HONEYCOMB开始,任务在单个线程上执行,以避免并行执行导致的常见应用程序错误。

如果您尝试在同一时间使用多个RefreshWeatherTasks,则可能会遇到问题。解决这个问题的一种方法是重写onPostExecute方法并包含一些代码,以确保AsyncTask已完成。

+0

感谢您的回答,它将我推向了一个解决方案。 AsyncTask没有完成的想法让我想起了它,并且我意识到它为什么不起作用。 – Madx23

+0

没问题,我很高兴它帮助你! – JAC

0

这是很多代码(并且我没有阅读全部内容),但是我可以告诉你在这种情况下不需要AsyncTask。没有必要“等待后台线程中的更新”,这就是为什么你使用监听器的原因。你似乎也有很多不必要的标志和逻辑围绕整个事情。我的直觉是你在有机会更新你之前就禁用了听众。

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

相关问题