IT博客汇
  • 首页
  • 精华
  • 技术
  • 设计
  • 资讯
  • 扯淡
  • 权利声明
  • 登录 注册

    Android 解决 GMS/Firebase AdView 启动慢的性能问题及 AdView 共用问题

    Trinea发表于 2017-02-15 00:17:18
    love 0

    Google Ads(Google 广告) Android 版的性能及其差,com.google.android.gms.ads.AdView 初始化已经赶上 WebView 了。如果 Activity 在 layout 中添加了 AdView 那就等着长时间的黑屏吧,在 Nexus 6P 上都需要好几秒的启动时间。

     

    另外 Firebase 文档中建议每个 AdView 用不同的 adUnitId,这样如果希望方便在所有 Activity 中统一添加 AdView 就比较麻烦了,这里分享一种方法解决这个问题,同时能一定程度上缓解 AdViews 性能差带来的启动延时。

     

    一. 解决 AdView 性能差带来的启动延时问题

    简单实例代码如下,完整代码可见第二部分介绍:

    [crayon-58a3bcd705f3a323345545/]

    不通过布局中添加 AdView 而是在代码中主动创建 AdView,并延时添加到布局中。

     

    如果一定要在布局中添加也可以通过开始将 AdView 设置为 gone 或者 viewstub 引用公共广告布局,后期再去主动展示。

     

    二. AdView 相关代码复用,同时 AdView 用不同的 adUnitId

    1. 定义公共部分——公共广告布局

    当然在开始前你是需要添加

    [crayon-58a3bcd705f49357151579/]

    等依赖以及 gradle plugin 的,具体请参考官方文档。

     

    添加布局文件 layout_ad.xml,作为公共广告布局单元,如下:

    [crayon-58a3bcd705f4f443727883/]

    其实就是一个空的 LinearLayout,后面用来存放 AdView。

     

    2. 定义公共部分——Java 公共部分之BaseActivity

    在 BaseActivity 中定义 initAdLayout(…) 函数,并绑定 AdView 生命周期。

    [crayon-58a3bcd705f54685786642/]

    initAdLayout(…) 函数主要就是新建 AdView 添加到之前的 LinearLayout 中。这个过程是被延时了 800ms 的,为了防止影响初始化速度。

     

    3. 引用——布局中添加公共广告布局

    现在在你需要添加广告的布局中引用公共广告布局

    [crayon-58a3bcd705f5b409958945/]

     

    4. 引用——Java 中初始化广告

    需要添加广告的 Activity 继承自 BaseActivity,在 onCreate 方法结束前调用 initAdLayout(String adUnitId) 方法。
    而不需要添加广告的 Activity 继承自 BaseActivity 不调用 initAdLayout(…) 函数即可。



沪ICP备19023445号-2号
友情链接