Проблема с производительностью многоугольников Android Google Maps v2?

Я использую карты Google v2 api для приложения для Android, которое я создаю, который должен рисовать полигоны на карте. Все работает нормально, когда количество многоугольников невелико, когда число больше, карта медленно загружается, а панорамирование и масштабирование происходит очень медленно. Я использую SupportMapFragment и добавляю многоугольники следующим образом:

for(PolygonOptions item : items) { getMap().addPolygon(poly); } 

Есть ли способ повысить производительность для большого количества полигонов?

Я также хочу нарисовать много многоугольников на карте в фоновом режиме, потому что загрузка и сборка вершин требует времени. Решение, которое сработало для меня, состояло в том, чтобы загрузить данные в AsyncTask, а затем передать точки для каждого многоугольника, поскольку он считывается обратно в метод в основном пользовательском интерфейсе в методе onProgressUpdate.

 private class AddZonesTask extends AsyncTask<Zone, Zone, Integer> { protected Integer doInBackground(Zone... zones) { for (Zone zone : zones) { Cursor cursor = provider.query( .... ); List<Points> points = cursorToPointsMethod(cursor); zone.add(points); publishProgress(zone); } return zones.length; } protected void onProgressUpdate(Zone... zones) { drawBorder(zones[0]); } protected void onPostExecute(Integer result) { } } 

Где drawBorder в главном пользовательском интерфейсе затем добавляет их к объекту карты.

Bobbake4 является правильным. Android требует, чтобы addPolygon находился в основном потоке. У меня тоже есть аналогичная проблема. В настоящее время я реализую asynctask, но, похоже, нет способа выполнить addPolygon из doInBackground мой текущий код ниже:

  private class AddPolygonToMap extends AsyncTask<String, Integer, ArrayList<PolygonOptions>> { @Override protected ArrayList<PolygonOptions> doInBackground(String... urls) { publishProgress(1); return drawPolygonWithPage(urls[0]); } @Override protected void onProgressUpdate(Integer... progress) { int value = progress[0] + progressBar.getProgress(); progressBar.setProgress(value); } @Override protected void onPostExecute(ArrayList<PolygonOptions> result) { for (int i = 0; i < result.size(); i++) { map.addPolygon(result.get(i)); } } } 

В идеале я хотел бы добавить фон AddPolygon … Есть ли другой способ сделать это?