插屏内嵌视频广告关闭时onAdDismissedFullScreenContent调用延迟求助
问题描述
- 关闭内嵌视频格式的插屏广告时,
onAdDismissedFullScreenContent方法调用存在2-3秒延迟 - 该问题仅针对内嵌视频插屏广告,文本、图片、富媒体等其他插屏广告格式无此延迟
- 带视频的插屏广告调用
onAdClosed时同样存在延迟

代码实现
插屏广告加载代码
val activity = activityWeakRef.get()!! AdManagerInterstitialAd.load(activity, APP_ID_ADS_INTER, AdManagerAdRequest.Builder().build(), object : AdManagerInterstitialAdLoadCallback() { override fun onAdLoaded(adManagerInterstitialAd: AdManagerInterstitialAd) { super.onAdLoaded(adManagerInterstitialAd) admInterstitialAd = adManagerInterstitialAd } override fun onAdFailedToLoad(loadAdError: LoadAdError) { super.onAdFailedToLoad(loadAdError) admInterstitialAd = null } })
插屏广告展示代码
admInterstitialAd!!.show(activityWeakRef.get()!!) admInterstitialAd!!.fullScreenContentCallback = object : FullScreenContentCallback() { override fun onAdFailedToShowFullScreenContent(adError: AdError) { super.onAdFailedToShowFullScreenContent(adError) } override fun onAdShowedFullScreenContent() { super.onAdShowedFullScreenContent() } override fun onAdDismissedFullScreenContent() { AppLogger.d(">>>>>>>>>>>>>> delay when call this method") // Do back screen super.onAdDismissedFullScreenContent() } }
解决方案
1. 修正回调设置时机
当前代码先调用show()再绑定fullScreenContentCallback,会导致广告启动后才关联回调,可能错过事件触发时机或影响响应速度。必须在调用show()前完成回调设置:
// 先设置回调,再展示广告 admInterstitialAd!!.fullScreenContentCallback = object : FullScreenContentCallback() { override fun onAdFailedToShowFullScreenContent(adError: AdError) { super.onAdFailedToShowFullScreenContent(adError) } override fun onAdShowedFullScreenContent() { super.onAdShowedFullScreenContent() } override fun onAdDismissedFullScreenContent() { AppLogger.d(">>>>>>>>>>>>>> delay when call this method") // Do back screen super.onAdDismissedFullScreenContent() } } admInterstitialAd!!.show(activityWeakRef.get()!!)
2. 升级Ad Manager SDK版本
低版本SDK可能存在视频广告回调延迟的已知Bug,建议升级到最新稳定版:
在项目build.gradle中更新依赖:
implementation 'com.google.android.gms:play-services-ads:22.6.0' // 替换为官方最新版本
3. 避免回调内执行耗时操作
如果onAdDismissedFullScreenContent中包含UI渲染、IO读写等耗时任务,会阻塞回调执行。确保回调内只做轻量操作,耗时任务放到子线程处理:
override fun onAdDismissedFullScreenContent() { AppLogger.d(">>>>>>>>>>>>>> delay when call this method") // 轻量UI操作直接在主线程执行 CoroutineScope(Dispatchers.Main).launch { // Do back screen } // 耗时任务转至子线程 CoroutineScope(Dispatchers.IO).launch { // 执行缓存清理、数据上报等耗时操作 } super.onAdDismissedFullScreenContent() }
4. 排查主线程阻塞问题
视频广告关闭后,SDK需要完成视频资源释放、缓存清理等操作,如果主线程被其他任务占用,会导致回调延迟。可以通过Android Studio的CPU Profiler排查主线程是否存在卡顿,优化占用主线程的业务逻辑。
5. 对比官方Demo验证
运行Google Ad Manager官方插屏广告Demo,对比是否存在同样延迟。如果Demo正常,说明问题出在项目代码或配置;如果Demo也有延迟,可提交反馈至Google Ads支持平台排查环境或广告源问题。
内容的提问来源于stack exchange,提问作者HaiHT
相关产品推荐
相关产品推荐

