Android Google Maps APIv2 Marker InfoWindow中的竞争条件

时间:2018-06-12 21:03:37

标签: android google-maps

我使用Google地图构建应用程序,显示一些标记。点击标记会显示带有图像和标题的自定义InfoWindow。使用Picasso(因此异步)加载图像,因此我需要在Picasso完成加载时更新InfoWindow。 Google地图以特定方式处理InfoWindow - 它首先将我的自定义视图呈现为位图,因此我无法加载图片.into(imageView)。相反,我创建一个Target,覆盖onBitmapLoaded,缓存图片,然后再次调用marker.showInfoWindow(),以便使用缓存的图片再次呈现InfoWindow

问题出现在Marker::showInfoWindow的竞争状态。我致电showInfoWindow Marker::isInfoWindowShown一段时间后返回false。令人遗憾的是,如果我在此期间再次致电showInfoWindow(例如,如果毕加索几乎立即加载图片,当它被毕加索缓存时)该呼叫将被忽略并且旧InfoWindow(没有显示图像)。我设法通过创建一个几乎忙于等待Thread成为marker.isInfoWindowShown()的{​​{1}}然后再次调用true来解决问题,但该解决方案非常适合。

所以问题是:如何在没有比赛的情况下重新绘制showInfoWindow并且无需在单独的InfoWindow上忙碌等待?

0 个答案:

没有答案