如何解决Admob InterstitialAd实参形参长度不一致报错
报错原因
编译报错核心提示:
InterstitialAd类的show方法无法适配传入参数,方法要求传入Activity类型参数,实际调用未传入任何参数,实参与形参列表长度不匹配。
这个问题是AdMob(Google Mobile Ads)SDK版本升级带来的API变更导致的:
- 20.0.0版本之前的SDK中,
InterstitialAd的show方法是无参方法,广告展示依赖加载广告时绑定的上下文 - 20.0.0及之后的新版SDK调整了
show方法签名,强制要求调用时显式传入Activity类型的参数作为广告展示宿主,用来校验上下文有效性,避免广告挂载到无效上下文引发内存泄漏、崩溃等问题 - 当前项目依赖的是新版AdMob SDK,但代码还在沿用旧版无参调用的写法,方法签名不匹配,所以直接触发编译错误。
修复方案
核心修改逻辑:调用show方法时,传入当前处于前台活跃状态的Activity实例即可,注意不能传入Application类型上下文、已经销毁的Activity实例。
修正后的可运行代码如下:
public void interstitialAdMobAd() { if (ActivityHome.getInstance().mInterstitialAd != null) { if (ActivityHome.getInstance().mInterstitialAd.isLoaded()) { Log.d("shsjks", "sdhsjkhd"); // 传入当前可见的宿主Activity,此处以ActivityHome单例实例为例 ActivityHome.getInstance().mInterstitialAd.show(ActivityHome.getInstance()); } else { // 广告未加载完成时,可在此补充重新触发广告预加载的逻辑 } } else { // 广告实例未初始化时,可在此补充广告初始化、预加载逻辑 } }
开发时需要注意几个细节:
- 如果是在Fragment中触发广告展示,可通过
requireActivity()获取当前宿主Activity传入show方法 - 传入的Activity必须处于前台可见状态,否则会出现广告展示失败、甚至应用崩溃的问题
- 不要传入非Activity类型的Context(比如Application、Service上下文),会触发类型校验异常
内容的提问来源于stack exchange,提问作者SUNIL Sangwal
相关产品推荐
相关产品推荐

