Android 使用Admob间隙式ads时内存泄漏
我的服务将在特定的时间点显示一个活动,在该活动之后,每13次我显示一个admob间隙广告。当间隙广告显示时,我的应用程序的RAM使用量将增加20MB,此后不会被垃圾收集。在接下来的第13次显示另一个插入式广告时,服务内存没有增加 我显示广告的代码:Android 使用Admob间隙式ads时内存泄漏,android,memory,android-activity,memory-leaks,eclipse-memory-analyzer,Android,Memory,Android Activity,Memory Leaks,Eclipse Memory Analyzer,我的服务将在特定的时间点显示一个活动,在该活动之后,每13次我显示一个admob间隙广告。当间隙广告显示时,我的应用程序的RAM使用量将增加20MB,此后不会被垃圾收集。在接下来的第13次显示另一个插入式广告时,服务内存没有增加 我显示广告的代码: public void loadAndShowInterstitialAd() { interstitial = new InterstitialAd(getApplicationContext()); interst
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();
}
}
在下面的堆栈溢出问题中,我尝试了一些解决方案,但没有任何效果
我已设法通过在另一个进程中运行Ad活动来解决此问题。我猜由于某些原因,android在进程内存中保留活动的时间超过了需要的时间。希望它能帮助某人解决此问题。我今天运行了此问题,终于找到了解决方法: 在您的活动中,在onDestroy()中:
- 如果存在AdView,请将其从布局中删除,然后将AdView设置为null
- 将所有AdListeners设置为null
在您的情况下,也许将AdListener设置为null就足够了@Override public void onDestroy(){ super.onDestroy(); mMainView.removeView(adView); adView = null; interstitial.setAdListener(null); }
Interstitial interstitial = new Interstitial(getApplicationContext())
你有一个例子吗?我已经用同样的问题试过了,但是找不到。您是否为此创建了一个新类?使用android:process属性来分隔要在不同进程中运行的活动。这解决了我的问题。在eclipse中使用DDMS视图来分析内存泄漏的对象。它可能会为您的问题提供一些线索。尝试这样做,似乎可以解决问题,因为Interstival启动的活动不再有多个实例。然而,有些事情仍然不对。如果让它整夜坐着看广告,它仍然会在某处积累记忆。我认为这是一个GoogleSDK类,但可能故障仍然存在于应用程序的某个地方。这并不能防止AdActivity对象泄漏。将有多个ADACTIVE副本,每个间隙显示…@frankish这是AdMob在这个问题上的立场,我们对ADACTIVE没有任何控制。我的方法是尽我们最大的努力,在我们这一方,我们有充分的权力,我们自己的书面活动。你的问题怎么样,现在可以了吗?将Interstitual的上下文设置为app context可以让GC删除我的MainActivity。然而,知道所有的广告内容仍在内存中,并且它会不断增长,这确实让我感到困扰:|
getApplicationContext()
技巧对我来说很有用。