Android,AdMob:AdMob广告刷新会破坏帧率

我正在开发一款游戏,而且这款游戏相当不错。 不过,我确实对AdMob广告刷新有点问题。 每当广告刷新或者绘制广告的不同方面时,我的帧速率就会下降,几乎使游戏无法播放。 这是我的加载广告…

ad = new AdView(this, AdSize.BANNER, "..."); AdRequest adRequest = new AdRequest(); adRequest.addTestDevice("..."); adRequest.addTestDevice("..."); RelativeLayout.LayoutParams lp = new RelativeLayout.LayoutParams( RelativeLayout.LayoutParams.WRAP_CONTENT, RelativeLayout.LayoutParams.WRAP_CONTENT); lp.addRule(RelativeLayout.ALIGN_PARENT_BOTTOM); lp.addRule(RelativeLayout.CENTER_HORIZONTAL); ad.setLayoutParams(lp); RelativeLayout layout = new RelativeLayout(this); layout.addView(renderView); layout.addView(ad); ad.loadAd(new AdRequest()); setContentView(layout); 

我在SurfaceView上渲染广告的解决scheme是将其添加到RelativeLayout ,并将SurfaceViewAdView添加到它。 这一切都可以正常工作,但每次广告刷新(用户界面或新的广告请求)时,都会使用户界面线程陷入瘫痪,进而导致渲染线程变慢。

有没有一种方法可以使所有这些工作很好地合作,让AdView完成的所有工作都与主线程分开进行? 我不太确定从另一个线程dynamic更新当前布局。

谢谢您的帮助。

Solutions Collecting From Web of "Android,AdMob:AdMob广告刷新会破坏帧率"

我也有这个问题。 我发现这是由Google广告引起的,它们在更改时会生成animation,而不是静态的Admob横幅广告。 您的admob应用设置中有一个设置,用于控制是否使用Google广告…尝试closures它,看看它是否有所作为。

为了复活这个问题抱歉,但是我遇到了同样的问题,并且发现在AdView的内部WebView上打开LAYER_TYPE_SOFTWARE使它更平滑。

我已经在Android 5.1上运行版本8.4.0,证实了这一点,尽pipe这种解决方法有可能会使更多具有更强CPU的设备受益。

在我的活动的onResume我有

 /* * The AdView attaches it's internal WebView only once it * has been loaded, so we need to wait until that happens. */ adView.setAdListener(new AdListener() { @Override public void onAdLoaded() { runOnWebView(mAdView, new WebViewAction() { @Override public void run(WebView view) { // the most important part is here view.setLayerType(View.LAYER_TYPE_SOFTWARE, null); } }); } }); 

用runOnWebView方法和WebViewAction接口定义为

 /** * Recursively searches for a WebView instance located in * the hierarchy of view and invokes the callback method on * action with the found instance. */ private void runOnWebView(View view, WebViewAction action) { if (view instanceof WebView) { action.run((WebView) view); return; } if (view instanceof ViewGroup) { final ViewGroup parent = (ViewGroup) view; for (int i = 0; i < parent.getChildCount(); i++) { runOnWebView(parent.getChildAt(i), action); } } } private interface WebViewAction { void run(WebView view); }