为了验证这一点,我从这里下载了Banner示例:https://developers.google.com/mobile-ads-sdk/docs/dfp/android/banner并修改了MainActivity以单独的方法执行loadAd()方法:
private PublisherAdView mAdView; private PublisherAdRequest adRequest; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_my); mAdView = (PublisherAdView) findViewById(R.id.ad_view); adRequest = new PublisherAdRequest.Builder().build(); loadAd(); } private void loadAd(){ long start = System.currentTimeMillis(); // Start loading the ad in the background. mAdView.loadAd(adRequest); long end = System.currentTimeMillis(); Log.d("MyActivity","loadAd took "+(end - start)+" ms"); }
当有更多广告同时显示时,问题变得更加明显(文章开头的横幅,介绍下方的矩形广告……)和UI冻结半秒甚至更多,直到它们被加载.
在滚动期间在RecyclerView和UI冻结中显示广告直到加载广告时,这也是一个问题.
我在这里遗漏了什么,或者这确实是PublisherAdView问题?
解决方法
我使用的方法是在片段和活动中显示横幅.可以在广告服务器端配置刷新.我会避免在列表中插入广告(例如在每个第n个元素中插入广告),但如果必须,请使用view.setTag记录标记以指示广告已加载.
此标志实际上可以是广告加载的时间.然后在recyclerview的bindViewHolder中使用该标记,或在传统listView中使用getItem来确定广告是否已加载.如果广告已经加载,那么只显示当前内容/布局,否则如果它已经过期(通过某些任意时间量,如30秒),或者未设置该值,则发送loadAd请求),但之后再次打击表演.
因此,当用户滚动时,滚动性能会逐渐提高,因为每次实例化列表元素时都不会继续请求广告.此外,当使用片段时,如果片段特别是,如果片段在onDestroyView期间位于viewpager中,请确保您的广告是Publisher广告.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。