广告

Android AdMob 初始化实战:Fragment 的正确使用步骤与最佳实践

1. Android AdMob 初始化与 Fragment 的基础使用

初始化前的准备

在开始接入 AdMob 之前,确保项目中已添加 Google Mobile Ads SDK,并了解其生命周期与 Fragment 的协作关系。核心要点是一次初始化、全局可用、在合适的生命周期点触发

在 build.gradle 中添加依赖,并在 AndroidManifest.xml 中提供应用的 AdMob App ID。依赖版本要与 Google Play 服务兼容,确保在混合应用中也能稳定工作。

// 适用于 Kotlin
// build.gradle (模块级)
dependencies {implementation 'com.google.android.gms:play-services-ads:22.1.0'
}

在 AndroidManifest.xml 中声明应用级的广告 ID,避免在运行时丢失标识信息。这一步通常放在 标签的 元素中

Android AdMob 初始化实战:Fragment 的正确使用步骤与最佳实践

在 Application 中全局初始化

推荐在自定义 Application 的 onCreate() 中完成 AdMob 的初始化,这样 Fragment 加载时可直接使用。确保初始化在最早阶段执行,避免因延迟加载导致广告位空白

// Java
public class MyApp extends Application {@Overridepublic void onCreate() {super.onCreate();// 初始化 AdMobcom.google.android.gms.ads.MobileAds.initialize(this, initializationStatus -> {// 可以在这里处理状态回调});}
}

在 Fragment 中正确集成广告视图

Fragment 作为 UI 单元,广告视图应放在布局中,并在生命周期内管理其资源。要避免在 Fragment 的 onCreate() 中创建广告视图,应在 onCreateView() 完成视图绑定后再加载广告。

布局中放置 AdView,并为不同的广告单元设置尺寸和对齐方式。以 Banner 广告为例,确保父容器有足够的宽高来呈现广告




在 Fragment 中加载广告并响应生命周期事件,确保资源得到正确释放。广告对象应在 Fragment 销毁时调用 destroy()

// Kotlin Fragment 示例片段
class SampleFragment : Fragment() {private var adView: AdView? = nulloverride fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {val view = inflater.inflate(R.layout.fragment_example, container, false)adView = view.findViewById(R.id.adView)val adRequest = AdRequest.Builder().build()adView?.loadAd(adRequest)return view}override fun onResume() {super.onResume()adView?.resume()}override fun onPause() {adView?.pause()super.onPause()}override fun onDestroyView() {adView?.destroy()adView = nullsuper.onDestroyView()}
}

2. Fragment 的正确使用步骤与最佳实践

将 AdMob 与 Fragment 生命周期对齐

广告的加载与 Fragment 的生命周期要保持一致,避免在不可见状态中加载导致浪费网络资源。对可见性变化要有清晰的处理路径,如在 setUserVisibleHint 或 ViewPager2 的回调中控制加载与暂停。

尽量在 Fragment 的 onCreateView 中初始化广告视图,避免重复创建。使用缓存的 AdView 实例可以降低重复创建成本

多 Fragment 场景下的广告策略

当应用中存在多个 Fragment 时,统一管理广告单元、避免重复请求,是提升体验的关键。可以在父活动中维护一个广告控制中心,将广告事件分发给子 Fragment。

为不同 Fragment 使用同一个广告单元可能导致广告填充失败,建议根据区域和网络状态差异化加载。确保对广告请求进行合理的状态检查

3. 进阶实践与性能优化

加载策略与资源管理

使用 AdLoader 或多种广告格式时,需要控制请求节奏,避免影响主线程和界面响应。推荐按场景异步加载,避免在渲染阶段阻塞 UI

广告资源的清理要在 Fragment 销毁时完成,避免内存泄漏。遵循生命周期销毁顺序,确保 AdView 调用 destroy()

测试与上线的注意点

在测试阶段切换到测试广告单元 ID,避免触发真实收入。使用 testDevice 配置和 Google 的测试广告指南

4. 代码实战示例

最小可行的初始化与广告加载演示

下面展示一个最小可工作版本,包含应用初始化、Fragment 集成广告 Banner 的完整流程。通过该示例可以快速验证 AdMob 与 Fragment 的协作

// Kotlin Application 初始化(MyApp.kt)
class MyApp : Application() {override fun onCreate() {super.onCreate()// 全局初始化 AdMobMobileAds.initialize(this) { initializationStatus ->// 可在此处理状态回调}}
}



// Kotlin Fragment 绑定广告
class BannerFragment : Fragment() {private var adView: AdView? = nulloverride fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {val view = inflater.inflate(R.layout.fragment_banner, container, false)adView = view.findViewById(R.id.adView)adView?.loadAd(AdRequest.Builder().build())return view}override fun onResume() {super.onResume()adView?.resume()}override fun onPause() {adView?.pause()super.onPause()}override fun onDestroyView() {adView?.destroy()adView = nullsuper.onDestroyView()}
}

广告

后端开发标签