我正试图在某些活动结束时显示插页式广告。问题是插页式广告似乎阻止了活动被垃圾收集而导致内存不足异常。我该如何解决这个问题?提前谢谢。
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{ //...
}
答案 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()
,因为返回的值将是您当前的活动。