微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Android上的PublisherAdView loadAd性能问题

我在应用程序中遇到了一些性能问题(UI呈现会暂时冻结),做了一些挖掘,发现PublisherAdView.loadAd()方法在冷应用程序启动时在Nexus 5上执行大约需要500-700ms,在后续运行时需要100-200ms .我预计最糟糕的是10-15ms.

为了验证这一点,我从这里下载了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问题?

解决方法

我有类似的经历,adMob使用网页浏览器,这在Android设备上效率极低,并且对cpu造成负担.最初的长加载时间是Android连接到Chromium插件以启动webview会话.一旦进入记忆,它将会改善.在列表/回收站视图中使用时最明显.

我使用的方法是在片段和活动中显示横幅.可以在广告服务器端配置刷新.我会避免在列表中插入广告(例如在每个第n个元素中插入广告),但如果必须,请使用view.setTag记录标记以指示广告已加载.

此标志实际上可以是广告加载的时间.然后在recyclerview的bindViewHolder中使用该标记,或在传统listView中使用getItem来确定广告是否已加载.如果广告已经加载,那么只显示当前内容/布局,否则如果它已经过期(通过某些任意时间量,如30秒),或者未设置该值,则发送loadAd请求),但之后再次打击表演.

因此,当用户滚动时,滚动性能会逐渐提高,因为每次实例化列表元素时都不会继续请求广告.此外,当使用片段时,如果片段特别是,如果片段在onDestroyView期间位于viewpager中,请确保您的广告是Publisher广告.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐