В соответствии с InterstitialAd Docs :
Один объект InterstitialAd может использоваться для запроса и отображения нескольких промежуточных объявлений в течение срока службы, , поэтому вы нужно только создать его один раз .
После повторного просмотра вашего кода я заметил, что вы воссоздаете mInterstitialAd
каждый раз, когда вызывается метод refreshInterstitial()
. Но согласно приведенным выше документам, вы должны создавать mInterstitialAd
только один раз за onCreate()
.
В вашем случае основная причина утечки памяти: у вас все еще есть активный слушатель (что связано с продолжительностью жизни действия), но вы восстанавливаете новый экземпляр InterstitialAd
с другим слушателем.
Итак, решение состоит в том, чтобы повторно использовать экземпляр InterstitialAd
и его слушатель без повторного назначения. Я предлагаю упростить ваш refreshInterstitial()
метод до этого:
private void refreshInterstitial() {
mInterstitialAd.loadAd(new AdRequest.Builder().addTestDevice(AdRequest.DEVICE_ID_EMULATOR).addTestDevice("877BCC97E130A0DC62B2E5770D854496").build());
}
Затем поместите mInterstitialAd
назначение в onCreate()
. Это решение похоже на то, которое вы можете найти здесь .