0

我的情况:

我使用一个AsyncTask为谷歌地图准备数据。因为此任务需要一些时间,所以我想在对象准备好时显示它们(而不是在完成后立即显示它们)。所以我使用publishProgress&onProgressUpdate来更新地图。
我使用 Google Maps Android API 实用程序库将标记添加到地图中。我ClusterManager.cluster()在数据更改后调用以强制重新加载标记。

问题:

什么都没发生。更新ProgressBarfromonProgressUpdate()完美无缺,但在地图上显示标记却没有。我可以看到所有应该被调用的方法都被调用了,并且我已经测试过这些方法在不是从AsyncTask. AsyncTask 完成后,所有标记都会神奇地显示出来,即使没有调用其他方法。
如果我使用相同的方法通过标准 API 将标记直接添加到地图中(即,而不是将它们添加到集群管理器中),则标记会按预期显示。

所以问题是 - 集群管理器是否有任何理由等待重新集群,直到 AsyncTask 完成?编辑:更准确地说,不是在doInBackground完成之后,而是在onPostExecute完成之后。

我无法理解和调试这个问题,已经花了一整天的时间。
提前致谢!

4

1 回答 1

1

原来问题在于混合多个AsyncTasks - 一个是我的,一个是集群管理器中的。修复 - 不是一个很好的修复 - 是在库中进行更改(由于私有字段,我没有找到很好地扩展它的方法)并以不同的cluster()方法执行任务集群任务:

if (Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.HONEYCOMB) {
    mClusterTask.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR,
            mMap.getCameraPosition().zoom);
} else {
    mClusterTask.execute(mMap.getCameraPosition().zoom);
}

在GitHub 上找到了这个建议——相当巧合—— 。

希望它可以避免其他人的头痛。

于 2014-08-08T01:10:59.730 回答