android - Android 上的 PublisherAdView loadAd 性能问题

标签 android performance google-dfp

我在应用程序方面遇到了一些性能问题(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 的问题?

最佳答案

我有类似的经历,adMob 使用 webviews,在引擎盖下,这在 Android 设备上效率低得可怕,并且对 CPU 造成负担。最初的长加载时间是 Android 连接到 Chromium 插件以启动 webview session 。一旦记住它就会改善。在列表/回收器 View 中使用时最为明显。

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

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

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

关于android - Android 上的 PublisherAdView loadAd 性能问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37851878/

相关文章:

android - 适用于 Xamarin 的 Genymotion Android 模拟器

java - 无法实例化指南针 Activity 的 Activity

android - AudioRecord - 写入 PCM 文件

android - 适用于 Android 的 Google Plus SDK : "Activity started without an EXTRA_ACCOUNT"

ads - 为什么我的 DFP 广告没有显示?

mysql - 为什么 IN() 被视为 O(logN) 操作?

angularjs - 与 DOM 中 ng-app/ng-controller 放置相关的 Angular View 性能

sql - 如何学习 SQL Server 索引调优?

google-dfp - 获取一个订单项的所有事件广告素材

javascript - 为什么 Internet Explorer 11 不接受这个 clickTAG flash 变量?