我试图在某些 Activity 结束时显示插页式广告。问题是插页式广告似乎可以防止 Activity 被垃圾收集,从而导致内存不足异常。我该如何解决这个问题?提前致谢。
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{ //...
}
最佳答案
好吧,我似乎已经通过更改来修复它
interstitial = new InterstitialAd(this);
到
interstitial = new InterstitialAd(getApplicationContext());
我不完全理解 java/android 中的内存管理,但我认为这是因为 Activity 引用了 interstitial,而 interstitial 引用了 Activity,所以两者都没有被垃圾收集。传入应用程序上下文而不是 Activity 上下文可以防止这种循环依赖并解决问题。希望这对某人有帮助 :D。
关于java - Android Admob Interstitial 内存泄漏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24463440/