android – 由于Admob广告,Recyclerview在滚动上滞后

前端之家收集整理的这篇文章主要介绍了android – 由于Admob广告,Recyclerview在滚动上滞后前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我想在RecyclerView中加载广告广告已成功加载,但在滚动时会出现这么多延迟

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

如何解决这个滞后?

  1. ((DealHolder) holder).adcardView.post(new Runnable() {
  2. @Override
  3. public void run() {
  4. final NativeExpressAdView adView = new NativeExpressAdView(((DealHolder) holder).itemView.getContext());
  5. final int adWidth = ((DealHolder) holder).adcardView.getWidth() - ((DealHolder) holder).adcardView.getPaddingLeft()
  6. - ((DealHolder) holder).adcardView.getPaddingRight();
  7. final int adHeight = ((DealHolder) holder).adcardView.getHeight() - ((DealHolder) holder).adcardView.getPaddingBottom()
  8. - ((DealHolder) holder).adcardView.getPaddingTop();
  9. final float scale = ((DealHolder) holder).adcardView.getResources().getDisplayMetrics().density;
  10. AdSize adSize = new AdSize((int) (adWidth / scale),(int) (adHeight / scale));
  11. adView.setAdSize(adSize);
  12. adView.setAdUnitId(((DealHolder) holder).adcardView.getContext().getString(R.string.test_adunit_id));
  13. AdRequest request = new AdRequest.Builder().addTestDevice("jjhjhbjhjhjhjhjhjhjh").build();
  14. adView.loadAd(request);
  15. adView.setAdListener(new AdListener() {
  16. @Override
  17. public void onAdLoaded() {
  18. super.onAdLoaded();
  19. }
  20.  
  21. @Override
  22. public void onAdFailedToLoad(int i) {
  23. super.onAdFailedToLoad(i);
  24. }
  25. });
  26. ((DealHolder) holder).adcardView.removeAllViews();
  27. ((DealHolder) holder).adcardView.addView(adView);
  28. }
  29. });

解决方法

改进:

>当用户尝试滚动时,请勿尝试加载Adview.为此,使您的适配器recylerView滚动识别,然后检查是否scroll_state == RecylerView.Scroll_IDLE,然后只加载您的AdView.>如果您的所有adView具有相同的宽度和高度,则每次用户滚动时都不会计算它,请将其缓存在变量中.>不要动态添加删除NativeExpressAdView,而是在item_view中使用XML版本.您可以根据条件隐藏和显示.在XML视图中设置所有可能的必需属性.

猜你在找的Android相关文章