gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:34:10 28 4
gpt4 key购买 nike

我想在 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/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com