我有一个从 API 中提取的位置的 ArrayList 列表,这些位置被添加到从 SupportMapFragment 生成的 GoogleMap 中。
我从列表中创建标记并将它们添加到地图中,然后将标记 ID 添加到标记索引的地图中,以便稍后通过 onInfoWindowClick 引用。
public void addLocationMarkers() {
mGoogleMap.clear();
LocationBlahObject thelocation;
int size = mNearbyLocations.size();
for (int i = 0; i < size; i++) {
thelocation = mNearbyLocations.get(i);
Marker m = mGoogleMap
.addMarker(new MarkerOptions()
.position(
new LatLng(thelocation.Latitude,
thelocation.Longitude))
.title(thelocation.Name)
.snippet(thelocation.Address)
.icon(BitmapDescriptorFactory
.defaultMarker(thelocation.getBGHue())));
mMarkerIndexes.put(m.getId(), i);
}
}
我的问题是,有时位置列表可能有数百个,并且地图会在添加标记时挂起几秒钟。
我尝试过使用 AsyncTask,但显然这里的大部分工作是操纵 UI,而我所做的任何 runOnUiThread 或 publishProgress 恶作剧都没有表现出任何区别。
有没有更好的方法来做到这一点,或者创建标记并批量添加我不知道的方法?