Java 谷歌广告中断了应用程序。减速fps

Java 谷歌广告中断了应用程序。减速fps,java,android,admob,ads,Java,Android,Admob,Ads,我使用AdView-mAdView和最近更新的库 我将AdView放置到布局中(如示例所示): 但是我的布局有一些动画对象。当新广告可见时,此动画将冻结(跳过某些帧) 我们不能抓住同样的问题与残疾互联网(它禁用广告,而不影响滞后) 我试图用我自己的记录显示问题(GIF无法完全显示): 我如何才能消除广告的滞后,让用户体验更好?我认为,广告不应该是一个横幅,因为这是一个大广告,这会降低性能,因为你应该把它缩小。这也可能涵盖应用程序中的内容(如果广告位于横幅上) 另一件事是,你不能有广告,这样性能

我使用
AdView-mAdView
和最近更新的库

我将AdView放置到布局中(如示例所示):

但是我的布局有一些动画对象。当新广告可见时,此动画将冻结(跳过某些帧)

我们不能抓住同样的问题与残疾互联网(它禁用广告,而不影响滞后)

我试图用我自己的记录显示问题(GIF无法完全显示):


我如何才能消除广告的滞后,让用户体验更好?

我认为,广告不应该是一个
横幅,因为这是一个大广告,这会降低性能,因为你应该把它缩小。这也可能涵盖应用程序中的内容(如果广告位于
横幅上)


另一件事是,你不能有广告,这样性能会更好。试试这些。大多数情况下,广告都有很好的图形效果,可能会减慢你的应用速度

将广告视图置于线性布局中,并实现广告侦听器。在adListener的onAdLoaded()方法中,将adView添加到线性布局中,如linearLayout.addView(adView),并将动画放置在线性布局上。我希望它能对您有所帮助。

作为我的应用程序中的一个解决方法,我设置了一个
图层类型

mAdView.setLayerType(View.LAYER_TYPE_SOFTWARE, null);


这是一个已知的问题,在网上已经讨论过很多次,用“AdMob fps drop”等词搜索就足够了

这里问题的根源很可能是运行AdMob需要大量资源,这就是动画开始暂停的原因。作为一种解决方案,您可以延迟显示广告:

Handler handler = new Handler ();
handler.postDelayed (new Runnable () {
     @Override
     public void run () {
          AdRequest bannerRequest = new AdRequest.Builder (). Build ();
          mAdView.loadAd (bannerRequest);
     }
}, 2000);
您可以使延迟不固定,但将其绑定到用户操作。例如,在用户停止滚动屏幕后立即开始下载广告

另一个解决方案是通过操纵LAYER_TYPE_软件属性来禁用广告的图形加速

mAdView.setAdListener(new AdListener(){
    @Override
    public void onAdLoaded(){
        runOnWebView(mAdView, new WebViewAction(){
            @Override
            public void run(WebView view){
                view.setLayerType(View.LAYER_TYPE_HARDWARE, null);
                view.setLayerType(View.LAYER_TYPE_SOFTWARE, null);
            }
        });
    }
});
对于这种解决方案,需要实现以下接口:

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);
}
private void runOnWebView(视图视图、webview操作){
if(查看WebView的实例){
运行((WebView)视图);
返回;
    }
if(视图组的视图实例){
最终视图组父视图=(视图组)视图;
对于(int i=0;i
类似地,可以关闭某些活动的加速:

<activity 
    android:hardwareAccelerated = "false"
    android:softwareAccelerated = "false" />


我不得不说:广告有一个固定的默认大小:它非常小:150*50。绘图?不,我想是GIF
Banner
是此类广告的名称。我在AdMob上看到过。如果你有一个像谷歌这样的服务器,那么使用广告就可以了。如果没有,就不要放广告,还有其他的单一化方式。我只是不明白你的意思。最后,我知道你不明白这个问题和AdMob。AdMob使用谷歌的服务器,实际上是谷歌的子公司需要更多关于加载何种广告的信息。{视频?文本?图像?)确保你没有覆盖。@你可以在第二个屏幕的底部看到它。这是谷歌的广告。默认广告横幅:150x50。你说的“覆盖”是什么意思滞后现象实际上已经存在。我不这么认为。它不起作用。我有自己的答案。它有帮助me@EgorRandomize但是你在回答中添加了我的解决方案!!我想你应该给我一个正确的符号:)当然!我实际上不知道哪个部分确实有用。view.setLayerType(view.LAYER\u TYPE\u HARDWARE,null);view.setLayerType(view.LAYER\u TYPE\u SOFTWARE,null);这一部分,我希望这是主要的解决方案!:)
mAdView.setAdListener(new AdListener(){
    @Override
    public void onAdLoaded(){
        runOnWebView(mAdView, new WebViewAction(){
            @Override
            public void run(WebView view){
                view.setLayerType(View.LAYER_TYPE_HARDWARE, null);
                view.setLayerType(View.LAYER_TYPE_SOFTWARE, null);
            }
        });
    }
});
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);
}
<activity 
    android:hardwareAccelerated = "false"
    android:softwareAccelerated = "false" />