Android Admob Внутренняя утечка памяти
Я пытаюсь показать вставки в конце некоторых действий. Проблема заключается в том, что рекламные вставки препятствуют сборке мусора, что приводит к исключению нехватки памяти. Как мне решить это? Заранее спасибо.
public class AdActivity extends FragmentActivity{
//...
protected InterstitialAd interstitial;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//...
// Create the interstitial.
interstitial = new InterstitialAd(this);
interstitial.setAdUnitId(INTERSTITIAL_UNIT_ID);
// Create ad request.
AdRequest adRequest2 = new AdRequest.Builder().addTestDevice(AdRequest.DEVICE_ID_EMULATOR)
.addTestDevice(deviceId)
.build();
// Begin loading interstitial.
interstitial.loadAd(adRequest2);
}
@Override
public void onPause() {
super.onPause();
displayInterstitial();
}
public void displayInterstitial() {
if (interstitial.isLoaded() && System.currentTimeMillis() >= lastInterstitial + timeLag * 1000) {
lastInterstitial = System.currentTimeMillis();
interstitial.show();
}
}
И я использовал это как:
public class ActivityA extends AdActivity{ //...
}
3 ответа
Хорошо, я, кажется, исправил это, изменив
interstitial = new InterstitialAd(this);
в
interstitial = new InterstitialAd(getApplicationContext());
Я не совсем понимаю управление памятью в java/android, но думаю, что происходит потому, что ссылки Activity содержат промежуточные и interstitial ссылки на Activity, поэтому ни один из них не получает мусор. Передача в контексте приложения, а не в контексте действия, предотвращает эту зависимость цикла и решает проблемы. Надеюсь, это кому-то поможет:D.
Просто используйте глобальный контекст приложения:
interstitial = new InterstitialAd(getApplication());
Не использовать getApplicationContext()
, потому что возвращаемое значение будет вашей текущей активностью.
Одна вещь, которая помогла мне, это вызвать interstitial.show() для uithread (так как я предполагаю, что его UI-вещи нужно делать в ui-нити)