我正在开发一款游戏,而且它的发展非常顺利。我确实对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
之上呈现广告的解决方案是将其添加到RelativeLayout
,并将SurfaceView
和AdView
添加到其中。这一切都运行得很好,但每次广告刷新(用户界面或新的广告请求)时,它都会让UI线程陷入困境,从而减慢渲染线程的速度。
有没有一种方法可以让所有这些工作很好地完成所有工作由AdView与主线程分开完成?我不太确定从另一个线程动态更新当前布局。
感谢您的帮助。
答案 0 :(得分:8)
我也有这个问题。我发现它是由Google广告引起的,这些广告在更改时会生成动画,而不是根本没有动画的静态Admob横幅广告。您的admob应用设置中有一个设置用于控制是否使用Google广告...尝试关闭它以查看它是否有所作为。
答案 1 :(得分:3)
为复活这个问题而道歉,但我遇到了同样的问题,并发现在LAYER_TYPE_SOFTWARE
的内部{{1}上转过 AdView
使它更顺畅。
我已经确认这项工作在Android 5.1上运行的版本8.4.0,虽然这种解决方法可能会使更多具有更强CPU的设备受益。
在我的活动中onResume我有
WebView
将runOnWebView方法和WebViewAction接口定义为
/*
* 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);
}
});
}
});