android - 由于 Admob 广告,Recyclerview 在滚动时滞后

标签 android admob android-cardview android-recyclerview

我想在 RecyclerView 中加载广告 广告已成功加载,但在滚动时会出现很多延迟

下面是我在Adapter的OnBindViewHolder方法中写的代码

如何解决这个延迟?

((DealHolder) holder).adcardView.post(new Runnable() {
                @Override
                public void run() {
                    final NativeExpressAdView adView = new NativeExpressAdView(((DealHolder) holder).itemView.getContext());
                    final int adWidth = ((DealHolder) holder).adcardView.getWidth() - ((DealHolder) holder).adcardView.getPaddingLeft()
                            - ((DealHolder) holder).adcardView.getPaddingRight();
                    final int adHeight = ((DealHolder) holder).adcardView.getHeight() - ((DealHolder) holder).adcardView.getPaddingBottom()
                            - ((DealHolder) holder).adcardView.getPaddingTop();
                    final float scale = ((DealHolder) holder).adcardView.getResources().getDisplayMetrics().density;
                    AdSize adSize = new AdSize((int) (adWidth / scale), (int) (adHeight / scale));
                    adView.setAdSize(adSize);
                    adView.setAdUnitId(((DealHolder) holder).adcardView.getContext().getString(R.string.test_adunit_id));
                    AdRequest request = new AdRequest.Builder().addTestDevice("jjhjhbjhjhjhjhjhjhjh").build();
                    adView.loadAd(request);
                    adView.setAdListener(new AdListener() {
                        @Override
                        public void onAdLoaded() {
                            super.onAdLoaded();
                        }

                        @Override
                        public void onAdFailedToLoad(int i) {
                            super.onAdFailedToLoad(i);
                        }
                    });
                    ((DealHolder) holder).adcardView.removeAllViews();
                    ((DealHolder) holder).adcardView.addView(adView);
                }
            });

最佳答案

改进:

  1. 不要在用户尝试滚动时加载您的 Adview。为此,请让您的适配器 recylerView 滚动感知,然后检查是否 scroll_state==RecylerView.Scroll_IDLE,然后只加载您的 AdView。

  2. 如果您的所有 adView 都具有相同的宽度和高度,则不会在用户每次滚动时都计算它,将其缓存在一个变量中。

  3. 不是动态地添加和删除您的 NativeExpressAdView,而是在您的 item_view 中使用它的 XML 版本。您可以根据条件隐藏和显示。在 XML View 中设置所有可能的必需属性。

关于android - 由于 Admob 广告,Recyclerview 在滚动时滞后,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44913068/

相关文章:

android - 我正在使用 firebase_admob 在我的 flutter 应用程序中实现 abmob,但广告在发布版本 apk 中不起作用

android - 在android中动态使用卡片 View

android - 抖动错误 LateInitializationError : Field '@' has not been initialized

android - 单击打开 Activity 时的本地通知

firebase - 尝试在Flutter项目上添加Firebase时遇到错误

android - 我如何将 admob 奖励广告实现为 unity

java - 单个卡片 View 上的随机数量的 TextView 不起作用

android - 如何使用 RecyclerView 和 CardView

带有 android fragment 的 java.lang.NullPointerException

android - 使用 OkHttp 检查套接字是否连接或断开连接的更好方法?