Google Ads прерывает приложение. Замедлить фпс - PullRequest
4 голосов
/ 07 февраля 2020

Я использую 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);

Но в моем макете есть анимированные объекты. Эта анимация останавливается (пропуская некоторые кадры), пока новое объявление становится видимым.

Мы не можем обнаружить ту же проблему с отключенным Inte rnet (он отключает рекламу и не влияет на лаги).

Я пытаюсь показать проблему с моей собственной записью ( GIF не может показать это полностью):

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

Как я могу убрать лаги рекламы и сделать пользовательский опыт лучше?

Ответы [ 4 ]

1 голос
/ 16 февраля 2020

В качестве обходного пути, который я также использую в своих приложениях, можно установить layertype:

mAdView.setLayerType(View.LAYER_TYPE_SOFTWARE, null);

или

 mAdView.setLayerType(View.LAYER_TYPE_HARDWARE, null);
0 голосов
/ 16 февраля 2020

Это известная проблема, которая много раз обсуждалась на net, достаточно для поиска по словам "AdMob fps drop" и т. П.

root проблемы скорее всего, здесь для запуска 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" />
0 голосов
/ 13 февраля 2020

Поместите вид рекламы в линейный макет и внедрите слушателей рекламы В методе adAdLoaded () метода adListener добавьте adView в линейный макет, например, linearLayout.addView (adView), и разместите анимацию в линейном макете. Я надеюсь, что это поможет вам.

0 голосов
/ 09 февраля 2020

Я думаю, что реклама не должна быть banner, так как это большая реклама, и это замедляет производительность, так как вы должны сделать ее небольшой. Это также может охватывать вещи в вашем приложении (если реклама на banner).

Другое дело, что у вас не может быть рекламы, так что производительность будет лучше. Попробуйте любой из них. Объявления в большинстве случаев имеют очень хорошую графику и могут замедлить работу вашего приложения. :)

...