Я использую AdView и LeakCanary. Фрагмент, в котором размещается adView, вызывает adView.destroy() в onDestroy, но LeakCanary показывает, что Activity, в котором размещен этот фрагмент, просачивается com.google.android.gms.common.api.a.a.a.i . Сброс кучи также показывает, что есть утечка памяти. Когда я удаляю AdView.loadAd() и не загружаю Ad в фрагмент - утечки нет. Любые мысли или предложения? Благодарю.AdView вызывает утечку памяти
ответ
Вы можете попробовать следующее:
- переместить логику в onDestroyView()
первый удалить
adView
из контейнера и затем вызвать уничтожить(), т.е.ViewParent parent = adView.getParent(); if (parent != null && parent instanceof ViewGroup) { ((ViewGroup) parent).removeView(adView); } adView.destroy(); adView = null;
Такая же проблема, у AdView есть внутренняя переменная (сильная ссылка), удерживающая контекст, который является моим Activit y, вызывая утечку экземпляра Activity.
Моя зависимость является com.google.android.gms:play-services-ads:8.3.0
обходной путь является обеспечение контекста приложения при создании экземпляра AdView.
AdView adview = new AdView(getApplicationContext());
Но если мы используем adView в XML, тогда это невозможно сделать. Я пробовал уничтожить adView onDestroy, но не помог. –
@Funkyidol ya layout inflater, скорее всего, обеспечивает активность как контекст AdView в layout xml. Добавление представления в группу просмотра программно не так уж ужасно. – dvd
Это единственное, что исправило это для меня. Позор, что я не могу добавить его в макет XML сейчас ... – eliasbagley
К сожалению, до сих пор происходит утечка памяти. Похоже, что adView имеет ссылку на активность. –
Я никогда не сталкивался с утечками памяти с помощью AdView, и мы используем DFP по всему миру. Можете ли вы убедиться, что используете новейшие сервисы Play. Я уверен, что это что-то другое, но не могу сказать, не видя какого-то исходного кода. –
Вы тестировали приложения с помощью LeakCanary или сваливанием кучи? Я использую последние 8.1.0 игровые сервисы –