Google Ads(Google 广告) Android 版的性能及其差,com.google.android.gms.ads.AdView 初始化已经赶上 WebView 了。如果 Activity 在 layout 中添加了 AdView 那就等着长时间的黑屏吧,在 Nexus 6P 上都需要好几秒的启动时间。
另外 Firebase 文档中建议每个 AdView 用不同的 adUnitId,这样如果希望方便在所有 Activity 中统一添加 AdView 就比较麻烦了,这里分享一种方法解决这个问题,同时能一定程度上缓解 AdViews 性能差带来的启动延时。
简单实例代码如下,完整代码可见第二部分介绍:
[crayon-58a3bcd705f3a323345545/]不通过布局中添加 AdView 而是在代码中主动创建 AdView,并延时添加到布局中。
如果一定要在布局中添加也可以通过开始将 AdView 设置为 gone 或者 viewstub 引用公共广告布局,后期再去主动展示。
当然在开始前你是需要添加
[crayon-58a3bcd705f49357151579/]等依赖以及 gradle plugin 的,具体请参考官方文档。
添加布局文件 layout_ad.xml,作为公共广告布局单元,如下:
[crayon-58a3bcd705f4f443727883/]其实就是一个空的 LinearLayout,后面用来存放 AdView。
在 BaseActivity 中定义 initAdLayout(…) 函数,并绑定 AdView 生命周期。
[crayon-58a3bcd705f54685786642/]initAdLayout(…) 函数主要就是新建 AdView 添加到之前的 LinearLayout 中。这个过程是被延时了 800ms 的,为了防止影响初始化速度。
现在在你需要添加广告的布局中引用公共广告布局
[crayon-58a3bcd705f5b409958945/]
需要添加广告的 Activity 继承自 BaseActivity,在 onCreate 方法结束前调用 initAdLayout(String adUnitId) 方法。
而不需要添加广告的 Activity 继承自 BaseActivity 不调用 initAdLayout(…) 函数即可。