yandexmobile / yandex-ads-sdk-android

Other
80 stars 22 forks source link

Destroy для NativeAd #196

Closed kastwsw closed 7 months ago

kastwsw commented 1 year ago

Здравствуйте.

Можно ли как-то очистить память, занимаемую объектом com.yandex.mobile.ads.nativeads.NativeAd ? Есть какой-либо метод destroy или что-то подобное? Как это сделано в других рекламных системах (в ваших доках ничего подобного нет).

У нас бесконечная лента, в которую вставлены NativeAd. Каждый загруженный Яндекс-баннер отъедает в среднем более 8MB ОЗУ. После показа он так и остаётся в памяти. Если интенсивно скролить ленту, то через какое-то время память на устройстве заканчивается. В результате апп падает.

Снимок экрана 2023-03-22 131600

mobile-ads-github commented 1 year ago

Добрый день, удаление ссылки на объект NativeAd должно помочь

kastwsw commented 1 year ago

Добрый день, удаление ссылки на объект NativeAd должно помочь

Правильно ли я понимаю, что в API нет метода destroy или чего-то подобного? И вы рекомендуете контролировать наличие ссылок на объект, и принудительно вызывать сборщик мусора?

Ссылки чистим. К сожалению, сборщик мусора не успевает за активными действиями пользователей.

Снимок экрана 2023-03-22 172222

DimaKoz commented 1 year ago

Удачная ветка, хотел нечто подобное заводить уже сам, а тут уже коллеги завели. У меня подобные проблемы.

Хотелось бы добавить, что и слушатели на события, которые передаются в SDK, тоже хранятся до победного, нет метода удалить у библиотеки ранее переданный слушатель, например: NativeAdLoadListener - его отдаем загрузчику(NativeAdLoader), дальше он в хранится в статике в глубине рекламной библиотеки, LeakCanary ругается на него, а возможности сообщить, что его бы надо удалить, т.к. он уже перестал быть нужен, у пользователя библиотеки нет.

ClosableNativeAdEventListener - его, вроде, есть шанс удалить, но у вас обфусцировано, не стал разбираться, хотелось бы иметь возможность удалять этот слушатель явно, когда он уже не нужен.

Прошу добавить возможность явно удалять слушатели NativeAdLoadListener и ClosableNativeAdEventListener. Если такая возможность уже есть, то прошу ссылку на документацию, где это описано.

mobile-ads-github commented 1 year ago

Добрый день. Чтобы очистить ссылку на листенер, должно быть достаточно вызвать:

nativeAdLoader.cancelLoading()
nativeAdLoader.setNativeAdLoadListener(null)

С наличием данных вызовов у вас возникает проблема с репортом LeakCanary?

DimaKoz commented 1 year ago

С наличием данных вызовов у вас возникает проблема с репортом LeakCanary?

да, завел https://github.com/yandexmobile/yandex-ads-sdk-android/issues/201

mobile-ads-github commented 1 year ago

Добрый день. Данная проблема была исправлена в версии рекламного SDK 5.9.0. Обновление версии SDK должно помочь.

pozitiffcat commented 9 months ago

Приветствую, Обновление версии библиотеки не помогло. В Heap Dump обнаружил большое количество битмапов по 5 мегабайт, которые хранятся вечно.

mobile-ads-github commented 9 months ago

Добрый день. До какой версии библиотеки вы обновились и при использовании какого формата рекламы происходит подобная утечка? Можете приложить более подробный отчет о ней?

kastwsw commented 9 months ago

Добрый день. До какой версии библиотеки вы обновились и при использовании какого формата рекламы происходит подобная утечка? Можете приложить более подробный отчет о ней?

com.yandex.android:mobileads:6.3.0 Нативная реклама. Загружаем объекты NativeAd с помощью NativeBulkAdLoader. Параметр adsCount = 5.

mobile-ads-github commented 9 months ago

Спасибо за Ваше обращение, для разбора создана задача с номером PCODESUP-2894. Мы ознакомимся и вернемся с ответом в течение 2 дней, возможно запросим дополнительную информацию.

Thank you for your message, a task with the number PCODESUP-2894 has been created for analysis. We will get acquainted and return with the answer within 2 days, we may request additional information.

mobile-ads-github commented 9 months ago

Добрый вечер! Расследуем данную ситуацию. Предполагаем, что действительно есть потенциальная проблема. Планируем исправить в ближайшем релизе. Спасибо за информацию!

mobile-ads-github commented 7 months ago

Добрый день! Спасибо за ожидание. Проблему исправили в 7.0.0. Рекомендуем обновиться.