Admob NativeAd接入RecyclerView滚动时MediaView视频广告白屏问题
RecyclerView接入AdMob原生视频广告滚动白屏问题解决方案
问题说明
- 接入场景:RecyclerView中集成搭载MediaView的NativeAd,采用Open bidding + AdMob的广告加载模式
- 异常表现:滚动列表时视频广告偶发白屏,图片广告加载完全正常
- 项目依赖版本:
implementation 'com.google.firebase:firebase-ads:20.2.0' implementation 'com.google.ads.mediation:facebook:6.5.0.0' - 白屏异常截图:

根因定位
该问题由同一个NativeAd实例跨页面重复渲染导致:应用使用ViewPager时,同一个原生广告会在两个ViewPager页面对应的Fragment中展示,NativeAd1在Screen A完成渲染后,再次放到Screen B中展示时就会触发MediaView视频渲染失效,出现白屏。
修复方案
- 禁止跨场景共享NativeAd实例:每个展示位(不同ViewPager页面、不同RecyclerView item)必须申请独立的NativeAd实例,AdMob返回的NativeAd实例绑定了专属的渲染上下文,多次绑定到不同View树会导致渲染逻辑异常。
- 及时清理废弃广告资源:在Fragment的
onDestroyView、RecyclerView.Adapter的onViewRecycled生命周期回调中,主动调用NativeAd的destroy()方法,同时将MediaView从父容器中移除、置空已绑定的广告实例,避免内存残留影响后续广告渲染。 - 优化列表复用逻辑:RecyclerView item复用时,先清空MediaView的已有内容,再绑定新的广告实例,避免上一个广告的渲染残留导致新广告白屏。
- 跨页面广告展示适配:如果业务需要在两个页面展示同一条广告内容,不要复用SDK返回的NativeAd实例,可以针对两个页面分别请求对应广告,或者缓存广告元数据(标题、封面、跳转链接等)后在第二个页面自行渲染。
内容的提问来源于stack exchange,提问作者axita.savani
相关产品推荐
相关产品推荐

