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

插屏广告显示时机错误:跳转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. 最终流程梳理

  1. MainActivity启动时,初始化并加载第一支插屏广告。
  2. 用户点击跳转按钮:
    • 有广告就显示,关闭后自动跳Activity2;
    • 广告加载失败/未就绪,直接跳转并重新加载广告。
  3. 从Activity2返回MainActivity时,广告已经重新加载完成,下次点击按钮可正常触发显示。

这样就能完全实现你要的“跳转前显示广告”的需求,不会再出现返回时才弹广告的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 00:10:53