Java Android Admob间隙内存泄漏
我试图在一些活动结束时显示间隙。问题在于,间隙似乎阻止了活动被垃圾收集,从而导致内存不足异常。我如何解决这个问题?提前谢谢Java Android Admob间隙内存泄漏,java,android,memory-leaks,out-of-memory,admob,Java,Android,Memory Leaks,Out Of Memory,Admob,我试图在一些活动结束时显示间隙。问题在于,间隙似乎阻止了活动被垃圾收集,从而导致内存不足异常。我如何解决这个问题?提前谢谢 public class AdActivity extends FragmentActivity{ //... protected InterstitialAd interstitial; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedIns
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);
到
我不完全理解java/android中的内存管理,但我认为这是因为Activity引用了Interstitual,Interstitual引用了Activity,所以两者都不会被垃圾收集。传入应用程序上下文而不是活动上下文可以防止这种循环依赖并解决问题。希望这对其他人有所帮助:D.帮助我的一件事是在uithread上调用interstitual.show()(因为我猜它的UI功能必须在UI线程上执行)只要使用应用程序全局上下文:
interstitial = new InterstitialAd(getApplication());
不要使用
getApplicationContext()
,因为返回的值将是您当前的活动。它没有任何区别,您可以从内存管理中检查它。
interstitial = new InterstitialAd(getApplication());