Android上的PublisherAdView loadAd性能问题

时间:2016-06-16 06:54:43

标签: android performance google-dfp

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

为了验证这一点,我从这里下载了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");
}

当有更多广告同时展示时,问题变得更加明显(文章开头的横幅,介绍下面的矩形广告......)和用户界面冻结半秒甚至更长时间加载。

在滚动期间显示广告在RecyclerView和用户界面冻结中,直到加载广告时,这也是一个问题。

我在这里遗漏了什么,或者这确实是PublisherAdView问题?

1 个答案:

答案 0 :(得分:1)

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

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

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

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