Неустранимое исключение: java.lang.OutOfMemoryError При добавлении полилинии на карту Google - PullRequest
0 голосов
/ 27 ноября 2018

У меня есть приложение, которое отслеживает местоположение при перемещении, каждые 5 секунд я отправляю широковещательный приемник, чтобы нарисовать ломаную линию на карте Google, я использую метод ниже:

    ArrayList<Location> locationList = Service.locationList;

    if (locationList.size() == 2) {
        Location fromLocation = locationList.get(0);
        Location toLocation = locationList.get(1);

        LatLng from = new LatLng(((fromLocation.getLatitude())),
                ((fromLocation.getLongitude())));

        LatLng to = new LatLng(((toLocation.getLatitude())),
                ((toLocation.getLongitude())));

        polyline = mMap.addPolyline(new PolylineOptions()
                .add(from, to)
                .width(10).color(Color.parseColor("#801B60FE")).geodesic(true));

    } else if (locationList.size() > 2 && polyline.getPoints()!=null) {
        Location toLocation = locationList.get(locationList.size() - 1);
        LatLng to = new LatLng(((toLocation.getLatitude())),
                ((toLocation.getLongitude())));

           points = polyline.getPoints();
            points.add(to);
            polyline.setPoints(points);

    }

Через некоторое время это вызывает OOM:

Неустранимое исключение: java.lang.OutOfMemoryError Не удалось выделить 603979784 байта с 16777216 свободными байтами и 197 МБ до OOM

java.util.Arrays.copyOf (Arrays.java: 3352)

java.lang.AbstractStringBuilder.expandCapacity (AbstractStringBuilder.java:130) com.android.volley.NetworkDispatcher.run (NetworkDispatcher.java:87)

Может кто угоднодай мне решение ??

Ответы [ 3 ]

0 голосов
/ 27 ноября 2018

используйте PolyUtil метод .simplyfy() для более консервативного использования памяти.

- это репозиторий и документация .

0 голосов
/ 21 декабря 2018

Создать глобальную переменную List of LatLng, ArrayList alData = new ArrayList <> ();

на вашем широковещательном приемнике и добавить код ниже,

LatLng position = new LatLng(((ocation.getLatitude())),
                ((location.getLongitude())));
        alData.add(position);

        if (polyline!=null)polyline.remove();

        polyline = googleMap.addPolyline(new PolylineOptions().addAll(alData));
0 голосов
/ 27 ноября 2018

Я думаю, что вы пытаетесь выделить массив, который содержит больше, чем Integer.MAX_VALUE элементов в этой строке.Вы не можете выделить больше, чем Integer.MAX_VALUE.

ArrayList<Location> locationList = Service.locationList;

Проверьте размер Service.locationList

...