我试图在某些活动结束时显示插页式广告。问题是插页式广告似乎阻止了活动被垃圾收集,从而导致内存不足异常。我该如何解决这个问题?提前致谢。
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);
to
interstitial = new InterstitialAd(getApplicationContext());
我不完全理解 java/android 中的内存管理,但我认为发生的事情是因为 Activity 引用了 interstitial,而 interstitial 引用了 Activity,所以两者都没有被垃圾收集。传入应用程序上下文而不是活动上下文可以防止这种循环依赖并解决问题。希望这对某人有帮助:D。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)