我一直致力于使用Google地图的Android应用程序,然后在后台运行一些冗长的网络密集型操作。目前,我正在使用一个线程来运行它们,它们需要30秒到7分钟才能完成。在Pluralsight上看了几个关于AsyncTasks和后台服务的课程后,我现在知道线程理想情况下不应该用于超过几秒钟的任何事情。我现在正在改变我使用GPS运行的解决方案,而不是花费几分钟来执行操作。目标是每次OnLocationChanged事件更新一个数组。
我在考虑如何在每个OnLocationChanged事件中更改全局数组,同时还从UI主线程访问它时遇到了麻烦。完成此任务的最佳选择是什么?我是否可以使用进程或AsynTask来实现此目的,还是需要进入客户端/服务器路由? OnLocationChanged将在何处被调用?
答案 0 :(得分:1)
首先,在UI线程上调用onLocationUpdated。所以你不必担心那里的多线程。
其次 - 如果你有一个需要被两个线程触及的变量,你只需使用一个信号量并在需要在每个线程上访问它之前接受它,并在完成后释放它。确保尽可能小而快地保留该代码块。您可以为高性能需求提供更高级的功能,但这对于99%的代码来说已经足够好了。
第三 - 正如我在评论中提到的,你对线程的理解是错误的。 UI线程的使用不应超过需要。 AsyncTasks不应该运行超过几秒钟(因为默认情况下它们运行的是单个线程,因此运行long会阻止其他请求)。但是Thread可以在需要时运行,并且如果需要长期后台处理则应该使用它。