Android Admob 插页式内存泄漏

use*_*187 3 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();
    }
}
Run Code Online (Sandbox Code Playgroud)

我这样使用它:

public class ActivityA extends AdActivity{ //...
} 
Run Code Online (Sandbox Code Playgroud)

use*_*187 5

好的,我似乎已经通过更改修复了它

interstitial = new InterstitialAd(this);
Run Code Online (Sandbox Code Playgroud)

interstitial = new InterstitialAd(getApplicationContext());
Run Code Online (Sandbox Code Playgroud)

我不完全理解 java/android 中的内存管理,但我认为发生的事情是因为 Activity 引用了 interstitial,而 interstitial 引用了 Activity,所以两者都没有被垃圾收集。传入应用程序上下文而不是活动上下文可以防止这种循环依赖并解决问题。希望这对某人有帮助:D。