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广告.

相关文章

Android性能优化——之控件的优化 前面讲了图像的优化,接下...
前言 上一篇已经讲了如何实现textView中粗字体效果,里面主要...
最近项目重构,涉及到了数据库和文件下载,发现GreenDao这个...
WebView加载页面的两种方式 一、加载网络页面 加载网络页面,...
给APP全局设置字体主要分为两个方面来介绍 一、给原生界面设...
前言 最近UI大牛出了一版新的效果图,按照IOS的效果做的,页...