【问题标题】:PublisherAdView loadAd performance issue on AndroidAndroid 上的 PublisherAdView loadAd 性能问题
【发布时间】:2016-09-13 07:49:08
【问题描述】:

我的应用程序出现了一些性能问题(UI 渲染会冻结片刻),进行了一些挖掘,发现 PublisherAdView.loadAd() 方法在应用程序冷启动时在 Nexus 5 上执行大约需要 500-700 毫秒和 100-200 毫秒在随后的运行中。我预计最坏的情况是 10-15 毫秒。

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

【问题讨论】:

    标签: android performance google-dfp


    【解决方案1】:

    我有类似的经历,adMob 在后台使用 webviews,这在 Android 设备上效率极低,并且占用了 CPU。最初的长加载时间是 Android 连接到 Chromium 插件以启动 webview 会话。一旦在记忆中,它会有所改善。在列表/回收器视图中使用时最为明显。

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

    这个标志实际上可以是广告的加载时间。然后在 recyclerview 的 bindViewHolder 中使用该标签,或在常规 listView 中使用 getItem 来确定广告是否已加载。如果广告已经加载,则只显示当前内容/布局,否则如果它已过期(如 30 秒之类的任意时间量),或者未设置该值,则发送 loadAd 请求),但是你再次受到性能冲击。

    因此,当用户滚动时,滚动性能会逐渐提高,因为您不必在每次实例化列表元素时都继续请求广告。此外,在使用 Fragments 时,请确保您 PublisherAdView.pause() 您的广告,如果 Fragment 尤其是在 onDestroyView 期间位于 viewpager 中。

    【讨论】:

      猜你喜欢
      • 2018-11-16
      • 1970-01-01
      • 1970-01-01
      • 2021-09-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多