02/15
2017

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

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

 

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

 

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

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

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

 

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

 

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

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

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

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

 

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

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

 

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

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

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

 

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

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

 

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

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

随手点点下面广告,支持我维护本站吧

您可以使用这些 HTML 标签和属性: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code class="" title="" data-url=""> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <pre class="" title="" data-url=""> <span class="" title="" data-url="">