有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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

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

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

<com.google.安卓.gms.ads.AdView
    xmlns:ads="http://schemas.安卓.com/apk/res-auto"
    安卓:id="@+id/adView"
    安卓:layout_width="wrap_content"
    安卓:layout_height="wrap_content"
    安卓:layout_gravity="center"
    ads:adSize="BANNER"
    ads:adUnitId="@string/banner_ad_unit_id">
</com.google.安卓.gms.ads.AdView>

然后我识别它并尝试在onCreate()方法中加载一个新广告:

AdView mAdView = findViewById(R.id.adView);
AdRequest adRequest = new AdRequest.Builder().build();
mAdView.loadAd(adRequest);

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

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

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

https://www.youtube.com/watch?v=adH2Mn79O7w

我怎样才能消除广告的滞后,让用户体验更好


共 (4) 个答案

  1. # 1 楼答案

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

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

  2. # 2 楼答案

    我的应用程序中也有一个解决方案,就是设置^{

    mAdView.setLayerType(View.LAYER_TYPE_SOFTWARE, null);
    

     mAdView.setLayerType(View.LAYER_TYPE_HARDWARE, null);
    
  3. # 3 楼答案

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

  4. # 4 楼答案

    这是一个已知的问题,在网上已经讨论过很多次,用“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);
    }
    

    类似地,可以关闭某些活动的加速:

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