yandexmobile / yandexmapkit-android

Yandex Map Kit for Android
160 stars 65 forks source link

D/yandex.maps.runtime: Java object is already finalized. Nothing to do. #304

Open DementorAl opened 6 years ago

DementorAl commented 6 years ago

Запускаю карту, навешиваю CameraListener, при движении карты очищаю mapObjects и расставляю точки по видимой области. После нескольких движений карты, которые обрабатываются корректно листенер перестает вызываться и в логах начинается спам сообщения: D/yandex.maps.runtime: Java object is already finalized. Nothing to do. Можете подсказать в чем проблема?

bedbug85 commented 6 years ago

Добрый день!

Удалось решить проблему? У меня та же ошибка, поделитесь опытом, если удалось решить.

Спасибо.

saint13 commented 6 years ago

Это ошибка показывает, что вы работаете с объектом в проекте, который уже удален в native lib. Попробуйте убрать удалене объектов с карты.

чт, 9 авг. 2018 г., 9:59 bedbug85 notifications@github.com:

Добрый день!

Удалось решить проблему? У меня та же ошибка, поделитесь опытом, если удалось решить.

Спасибо.

— You are receiving this because you are subscribed to this thread. Reply to this email directly, view it on GitHub https://github.com/yandexmobile/yandexmapkit-android/issues/304#issuecomment-411657433, or mute the thread https://github.com/notifications/unsubscribe-auth/ABSEm5bHD-N_wVJ0xavaVxQcOuz6EFjmks5uO93JgaJpZM4VWaLp .

bedbug85 commented 6 years ago

Спасибо, автор проблемы уже мне ответил и поддержка яндекс тоже.

листенеры нужно явно сохранять: MapObjectTapListener и InputListener, карта хранит их по weakref, ими владеет приложение.

Если его не сохранять, то в случайные моменты времени он будет переставать работать (соберется garbage collector), и в логе будут такие сообщения.

И это было указано документации яндекс, просто не внимательно посмотрел: При дальнейшей работе Listener-объекты, сообщающие о результате многократных операций или состоянии объекта, нужно явно сохранять в памяти:

private final CameraListener cameraListener = new CameraListener() { // Do something. }
mapview.getMap().addCameraListener(cameraListener);

45p3c7 commented 4 years ago

Спасибо, автор проблемы уже мне ответил и поддержка яндекс тоже.

листенеры нужно явно сохранять: MapObjectTapListener и InputListener, карта хранит их по weakref, ими владеет приложение.

Если его не сохранять, то в случайные моменты времени он будет переставать работать (соберется garbage collector), и в логе будут такие сообщения.

И это было указано документации яндекс, просто не внимательно посмотрел: При дальнейшей работе Listener-объекты, сообщающие о результате многократных операций или состоянии объекта, нужно явно сохранять в памяти:

private final CameraListener cameraListener = new CameraListener() { // Do something. } mapview.getMap().addCameraListener(cameraListener);

@bedbug85 Не мог бы ты сбросить ссылку где это указано в документации? Буду очень благодарен

omfg74 commented 4 years ago

Такая же проблема с нажатием на mapObject но создание strongRef не помогает

Kanunnikoff commented 3 years ago

@45p3c7 Полагаю, ​рѣчь​ шла объ этомъ. Понимаю, что въ Вашемъ конкретномъ случаѣ это уже неактуально, но, возможно, кому-то пригодится.