Перерисовка полилиний на картах Google

У меня есть приложение, выполняющее много перерисовок полилинии (около 4 перерисовок в секунду). Код для рисования полилинии:

            plo = new PolylineOptions().geodesic(true)
                    .color(Color.WHITE)
                    .width(4f)
                    .zIndex(0);
            plo.add(lineVector.position);
            plo.add(SphericalUtil.computeOffset(lineVector.position, 1000,lineVector.bearing));
            PredictionLine = mMap.addPolyline(plo);

Последняя полилиния удаляется с карты перед рисованием новой с помощью:

        PredictionLine.remove();

Это работает отлично, но только на некоторое время. Через некоторое время получаю сообщение:

Процесс com.google.process.gapps остановлен. ХОРОШО?

Я могу нажать «ОК», и приложение снова работает нормально, но также только в течение ограниченного времени. Затем внезапно все приложение вылетает. Просмотр журнала возвращает следующее:

07-23 10:41:32.838   12180-6237/app.skynavigator.android.skynavigator A/art﹕ art/runtime/indirect_reference_table.cc:98] JNI ERROR (app bug): global reference table overflow (max=51200)
07-23 10:41:32.838   12180-6237/app.skynavigator.android.skynavigator A/art﹕ art/runtime/indirect_reference_table.cc:98] global reference table dump:
07-23 10:41:32.838   12180-6237/app.skynavigator.android.skynavigator A/art﹕ art/runtime/indirect_reference_table.cc:98]   Last 10 entries (of 51200):
07-23 10:41:32.838   12180-6237/app.skynavigator.android.skynavigator A/art﹕ art/runtime/indirect_reference_table.cc:98]     51199: 0x356051e0 com.google.android.gms.clearcut.a.h
07-23 10:41:32.838   12180-6237/app.skynavigator.android.skynavigator A/art﹕ art/runtime/indirect_reference_table.cc:98]     51198: 0x356051a0 com.google.android.gms.clearcut.a.h
07-23 10:41:32.838   12180-6237/app.skynavigator.android.skynavigator A/art﹕ art/runtime/indirect_reference_table.cc:98]     51197: 0x35605160 com.google.android.gms.clearcut.a.h
07-23 10:41:32.838   12180-6237/app.skynavigator.android.skynavigator A/art﹕ art/runtime/indirect_reference_table.cc:98]     51196: 0x35605120 com.google.android.gms.clearcut.a.h
07-23 10:41:32.838   12180-6237/app.skynavigator.android.skynavigator A/art﹕ art/runtime/indirect_reference_table.cc:98]     51195: 0x356050e0 com.google.android.gms.clearcut.a.h
07-23 10:41:32.838   12180-6237/app.skynavigator.android.skynavigator A/art﹕ art/runtime/indirect_reference_table.cc:98]     51194: 0x353c38a0 com.google.android.gms.clearcut.a.h
07-23 10:41:32.838   12180-6237/app.skynavigator.android.skynavigator A/art﹕ art/runtime/indirect_reference_table.cc:98]     51193: 0x353c31e0 com.google.android.gms.clearcut.a.h
07-23 10:41:32.838   12180-6237/app.skynavigator.android.skynavigator A/art﹕ art/runtime/indirect_reference_table.cc:98]     51192: 0x353c1120 com.google.android.gms.clearcut.a.h
07-23 10:41:32.838   12180-6237/app.skynavigator.android.skynavigator A/art﹕ art/runtime/indirect_reference_table.cc:98]     51191: 0x353b7de0 com.google.android.gms.clearcut.a.h

Приложение работает без каких-либо других проблем, как только я удаляю вышеупомянутые строки кода. И идеи, если карта Google сталкивается с проблемой при перерисовке полилинии?


person Christoph    schedule 26.07.2015    source источник


Ответы (2)


не удалять и не добавлять новую полилинию, а только менять ее параметры! Вы можете изменить точки, ширину, цвет и т. д. полилинии, просто сохранив ссылку на нее!

setColor (целый цвет)

setGeodesic (логическая геодезическая)

setPoints (список точек)

setVisible (логическое видимое значение)

setWidth (ширина с плавающей запятой)

setZIndex (число с плавающей запятой)

https://developers.google.com/android/reference/com/google/android/gms/maps/model/Polyline

для выступлений будет легче и лучше!

person N Dorigatti    schedule 26.07.2015
comment
Спасибо за ответ. Это частично решило мою проблему, так как производительность намного лучше, чем при постоянном перерисовывании линий. Но вышеуказанная проблема все еще существует, но это занимает гораздо больше времени, пока не появится сообщение и приложение не вылетит. Довольно интересно, что это приложение работало без таких проблем до тех пор, пока около 2 месяцев назад что-то не пошло не так. Может ли быть, что любое обновление может вызвать эту проблему? - person Christoph; 28.07.2015
comment
Очень сложно сказать, потому что я чувствую, что это что-то в базовом API gmaps ... Может быть, что-то не так выпущено им. Вы должны сделать профилирование памяти и проверить распределение - person N Dorigatti; 28.07.2015
comment
Честно говоря, до сих пор я не пользовался инструментом профилирования памяти. Я потрачу некоторое время, чтобы привыкнуть к этому и, надеюсь, смогу что-то узнать. По крайней мере, с вашим решением приложение можно использовать и работать в течение необходимого периода времени. - person Christoph; 30.07.2015

Вам необходимо удалить глобальные ссылки на классы, а также на объекты.

person Apurva    schedule 26.07.2015