我有一个ArrayList:
ArrayList<GroundOverlayOptions> goArray;
- ca. 2-3k的元素。 当我尝试这样显示时:
for (GroundOverlayOptions temp : goArray) {
map.addGroundOverlay(temp);
}
需要大量的UiThread时间(大约10-15秒)并且它会产生ANR错误。 map.addGroudOverlay()必须在UiThread上运行。 有没有解决方法呢?
float longitude, float latitude, float width,float height, int color
{
final Bitmap bitmap = Bitmap
.createBitmap(1, 1, Bitmap.Config.ARGB_8888);
bitmap.setPixel(0, 0, color);
final BitmapDescriptor image = BitmapDescriptorFactory
.fromBitmap(bitmap);
final LatLngBounds bounds = new LatLngBounds(new LatLng(latitude
- height / 2, longitude - width / 2), new LatLng(latitude
+ height / 2, longitude + width / 2));
long startTime = System.currentTimeMillis();
GroundOverlayOptions go = new GroundOverlayOptions().image(image)
.positionFromBounds(bounds).transparency(0.33f);
goArray.add(go);
}
答案 0 :(得分:0)
为什么不尝试 AsyncTask 来做这件事?
private class MapTask extends AsyncTask<GroundOverlayOptions, Integer, Void> {
protected Void onPreExecute() {
//Use something like ProgressBar to keep user informed
}
protected Void doInBackground(GroundOverlayOptions... maps) {
//Will need to use maps[0]
//because that method treat this param as an Array
for (GroundOverlayOptions temp : maps[0]) {
map.addGroundOverlay(temp);
}
return null;
}
protected void onProgressUpdate(Integer... progress) {
//Update ProgressBar
}
}
执行循环调用的地方 AsyncTask 来处理此问题。 将 goArray 传递给 AsyncTask 。
new MapTask().execute(goArray);