Динамические наложения замедляют работу Google Maps (Android 2.1) на Nexus One - PullRequest
0 голосов
/ 07 мая 2010

Я пытаюсь создать динамический ItemizedOverylay (см. Код ниже) в Картах Google (Android 2.1) на Nexus One.

В моем Activity (который расширяет MapActivity) я создаю поток данных, который получает данные из сети. «Обработчик» используется для передачи данных из принимающего потока для отображения активности. Эти данные содержат местоположения (широта, долгота) маркеров, которые я хочу наложить на мою карту. Расположение каждого маркера является динамическим (то есть оно меняется каждый раз, когда я получаю новые данные из сети.) Метод refreshItems(ArrayList<OverlayItem> newItems) вызывается внутри handleMessage() обработчика. В ArrayList есть около 11 маркеров, которые передаются в refreshItems

Я вижу наложенные на карту маркеры. Однако у меня есть две проблемы:

  1. Старые маркеры не удаляются с карты. Через некоторое время я вижу след маркеров.

  2. Карта не реагирует ни на какие сенсорные команды. Я не могу переместить карту или увеличить или уменьшить масштаб. Через некоторое время я вижу системное предупреждение о том, что мое приложение не отвечает (ждать / закрыть?).

Есть идеи, что здесь не так?

Спасибо.

    public class MyItemizedOverlay extends ItemizedOverlay<OverlayItem> {

private ArrayList<OverlayItem> overlayItems;

public CoTItemizedOverlay(Drawable defaultMarker) {
    super(boundCenter(defaultMarker));
    overlayItems = new ArrayList<OverlayItem>();
    populate();
}

public void addNewItem(GeoPoint location, String markerText, String snippet) {
    overlayItems.add(new OverlayItem(location, markerText, snippet));
    populate();
}

public void removeItem(int index) {
    overlayItems.remove(index);
    populate();
}

public void refreshItems(ArrayList<OverlayItem> newItems) {
    // remove all existing items
    for (int i = 0; i < cotoverlayItems.size(); i++) {
        overlayItems.remove(i);
    }

    // copy all the items
    if (newItems != null && cotoverlayItems.size() == 0) {
        overlayItems.addAll(newItems);
    }

    populate();
}

@Override
protected OverlayItem createItem(int index) {
    return overlayItems.get(index);
}

@Override
public int size() {
    return overlayItems.size();
}

}

Ответы [ 2 ]

0 голосов
/ 27 марта 2012

Попробуйте это:

- очистить все старые маркеры перед получением и отобразить новые маркеры

YourMapOverlay mapOverLay = mapView.getOverlays();
mapOverlay.clear();
0 голосов
/ 07 мая 2010

Вы звоните населению повсюду. Прочитайте эту тему: Низкая производительность карты Android из-за большого количества оверлеев?

По этой же причине старые маркеры не исчезают.

...