java - Android Admob Interstitial 内存泄漏

标签 java android memory-leaks out-of-memory admob

我试图在某些 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/

相关文章:

java - 有没有办法在关闭时使用 ContextListener 关闭 contextDestroyed() 方法中的所有 ThreadLocals(保存 Session 对象)?

c - linux下按ctrl+c时如何避免内存泄漏?

java - 在 Ebean 中选择特定列

java - 无需java代码构建war文件

android - 当我不需要进程间通信时,Android Service 有用吗?

android - 图钉内带有用户图像的自定义谷歌地图标记

javascript - 在javascript(jquery)中销毁一个函数

java - ANTLR 正则表达式中的范围量词语法

java - 确定在列表末尾 append 值的复杂性

android - chrome 忽略 Intent 中包含的 header