Googleの広告は、アプリを中断します。スローダウンFPS

Egorランダム化:

私が使用AdView mAdViewして、最後に更新ライブラリ。

私は(例に示すように)私のレイアウトにAdViewを置きます:

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

どのように私は広告のラグを削除することができ、より良いユーザーエクスペリエンスを作りますか?

Egorランダム化:

これは、ネット上で何度も議論されている既知の問題、ある言葉「AdMobのfpsの低下」などで検索するのに十分です。

ここでの問題の根本は、ほとんどの場合、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_SOFTWAREプロパティを操作することにより、広告の無効グラフィックスアクセラレーションにあります。

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" />

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=12827&siteId=1