这个问题已经在这里有一个答案:
- 安卓,AdMob广告:AdMob广告刷新破坏帧率 2个回答
我使用谷歌AdMob SDK的V6.1.0(https://developers.google.com/mobile-ads-sdk/download),和我实例化com.google.ads.AdView编程方式(而不是在XML),并添加它变成一个LinearLayout中,动态地在我的活动。
我的一个用户报告说,当他们点击Home键,而在我的活动(以背景的话),他们开始看到源自于我的应用程序的CPU使用率过高。 我能够重现这在杰利贝恩平台,并注意到了CPU占用率过高的来源是一个WebViewCoreThread。
我的活动完全不使用任何网页视图,但我能够步我的活动的初始化,并注意到,当我实例化的AdMob的AdView对象本WebViewCoreThread开始。 正如AdMob的引用状态,我调用destroy()方法对这个AdView的在我的活动的的onDestroy()方法。 我ASO改变了我的代码来调用AdView.onDestroy()在我的onPause()方法。 但似乎没有引起该WebViewCoreThread停止。 我想,我好了,如果该线程支左右。 但是,如果我一遍又一遍的开始我的活动几次,这个线程开始我的CPU的8%至25%之间使用任何地方,甚至我的活动是不是在前台。
我注意到其他一些用户说,你必须调用WebView.onPause()作为纠正措施。 (http://stackoverflow.com/questions/2040963/webview-threads-never-stop-webviewcorethread-cookiesyncmanager-http0-3)但这不是我直接可能的,因为我的Web视图是由AdMob的AdView的创建。 我也改变了我的代码来调用.removeAllViews()为MT AdMob联播AdView中的容器的LinearLayout对象,然后调用System.gc()来强制垃圾回收,但似乎没有杀死我的WebViewCoreThread并最终开始吃起来,直到CPU强迫我-KILL我的应用程序的过程。
任何线索为什么AdMob的是这样做的,我怎么能强迫该线程会死吗?
我安装,我创建封装AdView的创造与毁灭的一类。 我把这个类的getNewAd()在我的活动的初始化方法。 我呼吁这个类的removeAd()在我的活动的的onPause()和的onDestroy()方法:
package com.shiprack.client;
import com.google.ads.AdRequest;
import com.google.ads.AdSize;
import com.google.ads.AdView;
import com.mobclix.android.sdk.Mobclix;
import com.mobclix.android.sdk.MobclixMMABannerXLAdView;
import android.app.Activity;
import android.view.Gravity;
import android.view.ViewGroup.LayoutParams;
import android.widget.LinearLayout;
public class AdManager {
public AdManager(EventLog logger, LinearLayout container, Activity activity) {
_container = container;
_activity = activity;
_eventLogger = logger;
}
public void setNetwork(int network) {
_network = network;
}
public void getNewAd() {
LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(LayoutParams.FILL_PARENT,LayoutParams.FILL_PARENT);
params.gravity = Gravity.CENTER;
switch (_network) {
case TrackDatabase.AD_NETWORK_ADMOB: {
_admobBanner = new AdView(_activity, AdSize.BANNER, "a14dc419375634c");
_container.addView(_admobBanner, params);
_admobBanner.loadAd(new AdRequest());
break;
}
case TrackDatabase.AD_NETWORK_MOBCLIX: {
Mobclix.onCreate(_activity);
_mobclixBanner = new MobclixMMABannerXLAdView(_activity);
_container.addView(_mobclixBanner, params);
_mobclixBanner.getAd();
break;
}
}
}
public void removeAd() {
switch (_network) {
case TrackDatabase.AD_NETWORK_ADMOB: {
_admobBanner.destroy();
break;
}
case TrackDatabase.AD_NETWORK_MOBCLIX: {
_mobclixBanner.cancelAd();
break;
}
}
_container.removeAllViews();
}
private EventLog _eventLogger;
private LinearLayout _container;
private Activity _activity;
private AdView _admobBanner;
private MobclixMMABannerXLAdView _mobclixBanner;
private int _network;
}