You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android Fragment接入锚定自适应横幅广告 返回后不显示问题

Fragment返回后锚定自适应横幅广告不显示问题排查方案

优先排查生命周期绑定错误(单Activity+Navigation架构90%的此类问题都是这个原因)

Navigation组件切换Fragment时,退到后台的Fragment只会触发onDestroyView销毁视图层级,不会触发onDestroy销毁Fragment实例,直到该Fragment被彻底移出返回栈。你当前的AdView生命周期写法完全不匹配这个特性:

  • 把adView.destroy()写在onDestroy里,会导致Fragment切走时,绑定了已废弃视图的AdView实例不会被销毁,残留实例会和返回时新建的AdView冲突
  • 没有在视图销毁时把AdView从父布局移除、清空引用,会导致内存泄漏,同时新的AdView无法正确挂载到视图树

直接替换生命周期代码为如下实现:

private var adView: AdView? = null

override fun onPause() {
    adView?.pause()
    super.onPause()
}

override fun onResume() {
    super.onResume()
    adView?.resume()
}

override fun onDestroyView() {
    // 移除AdView并销毁,释放资源
    (adView?.parent as? ViewGroup)?.removeView(adView)
    adView?.destroy()
    adView = null
    // 同步清空ViewBinding引用,避免内存泄漏
    _binding = null
    super.onDestroyView()
}

override fun onDestroy() {
    // 移除原有写在这里的adView.destroy()逻辑,这里不需要处理AdView
    super.onDestroy()
}

检查setupAdview实现逻辑

  • 每次onCreateView调用setupAdview时,必须新建AdView实例,严禁复用绑定过旧视图的AdView对象
  • 锚定自适应广告的宽度计算必须基于当前inflate出来的最新View布局参数,不要缓存历史宽度值,否则会因为View未完成测量拿到宽度0,导致广告请求非法
  • 确认AdView在创建后被正确add到指定的广告容器布局中,不要遗漏addView步骤

定位具体加载失败原因

以上修改后如果仍不显示,给AdView绑定加载回调,通过onAdFailedToLoad返回的错误码直接定位原因:

  • ERROR_CODE_NO_FILL:当前无匹配的广告填充,属于正常情况,切换测试广告位、等待一段时间重试即可
  • ERROR_CODE_INVALID_REQUEST:请求参数非法,检查广告位ID是否正确、广告尺寸是否大于0、AdView是否已挂载到视图树
  • ERROR_CODE_NETWORK_ERROR:网络异常,检查返回页面时的网络状态,触发重试即可
  • ERROR_CODE_INTERNAL_ERROR:SDK内部异常,升级到最新版Mobile Ads SDK后重试

内容的提问来源于stack exchange,提问作者DeKekem

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.27 22:33:24