Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/224.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android,AdMob:AdMob广告刷新破坏帧速率_Android_Admob - Fatal编程技术网

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

Android,AdMob:AdMob广告刷新破坏帧速率,android,admob,Android,Admob,我正在开发一款游戏,它进展得非常顺利。不过,我确实对AdMob广告有点问题。每当广告刷新或它绘制广告的不同方面时,我的帧速率就会急剧下降,几乎使游戏无法播放。这是我用来装广告的东西 ad = new AdView(this, AdSize.BANNER, "..."); AdRequest adRequest = new AdRequest(); adRequest.addTestDevice("..."); adRequest.addTestDevice(".

我正在开发一款游戏,它进展得非常顺利。不过,我确实对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或新的广告请求)时,它都会阻塞UI线程,这反过来又会减慢我的渲染线程

有没有一种方法可以使所有这些工作很好地结合在一起,使AdView的所有工作都与主线程分开完成?我不太确定是否要从另一个线程动态更新当前布局


谢谢你的帮助。

我也有这个问题。我发现这是由谷歌广告引起的,谷歌广告在广告改变时会产生动画,而不是静态的Admob横幅广告,这些广告根本不会产生动画。admob应用程序设置中有一个用于控制是否使用谷歌广告的设置。。。试着关闭它,看看它是否有什么不同。

很抱歉再次提出这个问题,但我还是遇到了同样的问题,并发现在
AdView
的内部
网络视图上打开
会使问题变得更为顺利

我已经证实,在安卓5.1上运行的8.4.0版本中,这一点在我这边是可行的,尽管这一解决方案可能会使更多具有更强CPU的设备受益

在我的活动简历中,我有

/*
 * 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);
}
/**
*递归搜索位于中的WebView实例
*视图的层次结构,并调用
*对找到的实例执行操作。
*/
私有void runOnWebView(视图视图、WebViewAction操作){
if(查看WebView的实例){
运行((WebView)视图);
返回;
}
if(视图组的视图实例){
最终视图组父视图=(视图组)视图;
对于(int i=0;i
这确实有帮助。在将Adsense整合到广告中的同时,我还能做些什么来解决这个问题吗?你可以尝试调整线程优先级。尝试降低主线程的优先级,这样可以减少渲染线程和游戏引擎线程的冲突。理想情况下,你的UI线程只需以较低的优先级更新该广告。我一直在搜索,但找不到该设置的位置。我正在使用新的apps.admob.com网站。此设置选项是否仍然存在?