插屏广告显示时机错误:跳转MainActivity至Activity2时未触发返回时才显示
问题:跳转Activity时插屏广告显示时机错误
我希望在从MainActivity跳转到Activity2时显示插屏广告,但实际广告仅在从Activity2返回MainActivity时才显示。尝试将mInterstitialAd.show(MainActivity.this)中的上下文换成Activity2相关的内容(比如Activity2、Activity2.class)都出现红色报错。
按钮点击代码:
if (mInterstitialAd != null) { mInterstitialAd.show(MainActivity.this); } else { Log.i(TAG, "Ad failed to load"); }
广告加载与初始化代码:
protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); MobileAds.initialize(this, new OnInitializationCompleteListener() { @Override public void onInitializationComplete(InitializationStatus initializationStatus) { } }); loadInterstitial(); } public void loadInterstitial(){ AdRequest adRequest = new AdRequest.Builder().build(); InterstitialAd.load(this, getString(R.string.interstitial_ad_unit_id), adRequest, new InterstitialAdLoadCallback() { @Override public void onAdLoaded(@NonNull InterstitialAd interstitialAd) { super.onAdLoaded(interstitialAd); Log.d(TAG, "Ad loaded successfully"); mInterstitialAd = interstitialAd; mInterstitialAd.setFullScreenContentCallback(new FullScreenContentCallback() { @Override public void onAdFailedToShowFullScreenContent(@NonNull AdError adError) { super.onAdFailedToShowFullScreenContent(adError); Log.d(TAG, "Ad failed to show"); } @Override public void onAdShowedFullScreenContent() { super.onAdShowedFullScreenContent(); Log.d(TAG, "Ad shown successfully"); mInterstitialAd = null; } @Override public void onAdDismissedFullScreenContent() { super.onAdDismissedFullScreenContent(); Log.d(TAG, "Ad dismissed"); } }); } @Override public void onAdFailedToLoad(@NonNull LoadAdError loadAdError) { super.onAdFailedToLoad(loadAdError); Log.i(TAG, "onAdLoaded"); mInterstitialAd = null; } }); }
解决方法
1. 核心错误点
你当前的代码只处理了广告显示,完全没有写跳转Activity2的逻辑——等于点击按钮后只弹出广告,用户关闭广告后还是停在MainActivity。你误以为返回时才显示广告,大概率是后续手动打开Activity2再返回时,广告刚好重新加载完成触发了显示。
另外,InterstitialAd.show()必须传入当前活跃的Activity上下文,Activity2还没创建实例,直接传Activity2.class这类内容肯定报错,只能用MainActivity.this。
2. 修正后的完整实现
步骤1:修改按钮点击逻辑
把跳转Activity2的动作放到广告关闭的回调里,实现“先看广告,再跳转”的流程:
// 按钮点击事件代码 if (mInterstitialAd != null) { mInterstitialAd.show(MainActivity.this); // 重写广告回调,控制跳转时机 mInterstitialAd.setFullScreenContentCallback(new FullScreenContentCallback() { @Override public void onAdDismissedFullScreenContent() { super.onAdDismissedFullScreenContent(); Log.d(TAG, "Ad dismissed"); // 广告关闭后启动Activity2 Intent intent = new Intent(MainActivity.this, Activity2.class); startActivity(intent); // 重新加载下一次要用的广告 loadInterstitial(); } @Override public void onAdFailedToShowFullScreenContent(@NonNull AdError adError) { super.onAdFailedToShowFullScreenContent(adError); Log.d(TAG, "Ad failed to show"); // 广告显示失败,直接跳转 Intent intent = new Intent(MainActivity.this, Activity2.class); startActivity(intent); mInterstitialAd = null; loadInterstitial(); } @Override public void onAdShowedFullScreenContent() { super.onAdShowedFullScreenContent(); Log.d(TAG, "Ad shown successfully"); mInterstitialAd = null; } }); } else { Log.i(TAG, "Ad failed to load"); // 无可用广告,直接跳转 Intent intent = new Intent(MainActivity.this, Activity2.class); startActivity(intent); loadInterstitial(); }
步骤2:保留广告预加载逻辑
你原本在onCreate里调用loadInterstitial()的逻辑没问题,加上广告关闭后重新加载的代码,能保证下次点击按钮时广告大概率已准备好。
3. 最终流程梳理
- MainActivity启动时,初始化并加载第一支插屏广告。
- 用户点击跳转按钮:
- 有广告就显示,关闭后自动跳Activity2;
- 广告加载失败/未就绪,直接跳转并重新加载广告。
- 从Activity2返回MainActivity时,广告已经重新加载完成,下次点击按钮可正常触发显示。
这样就能完全实现你要的“跳转前显示广告”的需求,不会再出现返回时才弹广告的问题。
内容的提问来源于stack exchange,提问作者Binbows
相关产品推荐
相关产品推荐

