Android Admob插页式内存泄漏

时间:2014-06-28 04:00:20

标签: java android memory-leaks out-of-memory 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 个答案:

答案 0 :(得分:4)

好吧我好像通过改变

修复了它
interstitial = new InterstitialAd(this);

interstitial = new InterstitialAd(getApplicationContext());

我不完全理解java / android中的内存管理但我认为最新的是因为Activity引用插页式广告和插页式广告有一个对Activity的引用所以既不会被垃圾收集。传入应用程序上下文而不是Activity上下文可以防止此循环依赖性并解决问题。希望这有助于某人:D。

答案 1 :(得分:0)

有一件事对我有帮助就是在uithread上调用interstitial.show()(因为我猜它的UI-stuff你必须在ui-thread上做)

答案 2 :(得分:0)

只需使用应用程序全局上下文:

interstitial = new InterstitialAd(getApplication());

请勿使用getApplicationContext(),因为返回的值将是您当前的活动。