Мое приложение использует 80% разрешенных 16 МБ, и AdView протекает при каждом изменении ориентации (так как тогда Android уничтожает и воссоздает всю активность).В результате у меня не хватает памяти после дюжины изменений ориентации, и мне страшно:
10-08 10: 14: 47.178: ОШИБКА / dalvikvm-heap (2876): 1440000-байтовое внешнее распределение тожебольшой для этого процесса.
10-08 10: 14: 47.178: ОШИБКА / dalvikvm (2876): Недостаточно памяти: Размер кучи = 5191 КБ, Выделено = 2877 КБ, Размер растрового изображения = 18675 КБ
10-08 10: 14: 47.178: ОШИБКА / GraphicsJNI (2876): ВМ не позволяет выделять 1440000 байт
или аналогичных.
Увеличение памяти можно легко увидеть в затмениивыполнив отладочный прогон и открыв Окно> Открыть перспективу> Другое> DDMS, щелкнув значок «Обновить кучу» и выполнив GC «Причина».Самый простой способ проверить imho - это #Objects.Если ориентация изменилась с книжной на альбомную и обратно, количество объектов должно быть одинаковым (и без AdView).
Я работаю над утечкой памяти, делая AdView статичным
private static AdView mAdView = null;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if(mAdView == null)
{
mAdView = new AdView(this, AdSize.BANNER, ADMOB_PUBLISHER_ID);
}
}
и не вызывать уничтожение
@Override
public void onDestroy() {
super.onDestroy();
//mAdView.destroyDrawingCache();
//mAdView.destroy();
//mAdView = null;
}
По крайней мере, это предотвращает утечки памяти между каждым изменением ориентации.
Также я установил запрос на null после его использования.Не знаю, поможет ли это.
AdRequest request = new AdRequest();
mAdView.loadAd(request);
request = null;