我有服务会在特定时间点显示活动,在每13次活动后我会展示一个admob插页式广告。显示插页式广告时,我的应用程序的RAM使用量增加了20MB,之后没有收集垃圾。在接下来的第13次显示其他插页式广告时,服务内存不会增加。
我展示广告的代码:
public void loadAndShowInterstitialAd() {
interstitial = new InterstitialAd(getApplicationContext());
interstitial.setAdUnitId(AD_UNIT_ID);
final AdRequest adRequest = new AdRequest.Builder()
.build();
Handler handler = new Handler(new Handler.Callback() {
@Override
public boolean handleMessage(Message msg) {
interstitial.loadAd(adRequest);
return true;
}
});
if (handler != null) {
handler.sendEmptyMessageDelayed(0, 200);
}
interstitial.setAdListener(new AdListener() {
@Override
public void onAdLoaded() {
super.onAdLoaded();
displayInterstitial();
}
});
}
public void displayInterstitial() {
if (interstitial.isLoaded()) {
interstitial.show();
}
}
我在下面的堆栈溢出问题中尝试了一些解决方案,但没有任何方法可以帮助我。
答案 0 :(得分:9)
我今天遇到了这个问题,最后我有一个修复: 在您的活动中,在onDestroy()中:
将所有AdListeners设置为null。
@Override
public void onDestroy(){
super.onDestroy();
mMainView.removeView(adView);
adView = null;
interstitial.setAdListener(null);
}
在您的情况下,将AdListener设置为null就足够了。
<强> P / S:强>
因为泄漏发生在很多方面,以防万一有人错过了这个:记得使用Context.getApplicationContext()初始化非页内广告(就像OP所做的那样),而不是你的活动 - 这绝对会造成泄漏 - 因为现在是插页式的似乎对你的活动有一个参考,它永远不会离开,所以永远不要让你的活动去......
Interstitial interstitial = new Interstitial(getApplicationContext())
答案 1 :(得分:2)
我已设法通过在其他进程中运行Ad活动来解决此问题。我想由于某些原因,android将进程内存中的活动保留的时间超过了所需的时间。希望它能帮助某人解决这个问题。