更新AdMob SDK后StartActivity卡在进度对话框无法跳转页面
问题分析与解决方案
你的代码只处理了广告成功加载并正常关闭的场景,广告加载失败、广告显示失败这两个关键分支没有处理进度对话框(pd)的关闭和页面跳转逻辑,导致这两种情况发生时,进度框一直显示,页面卡住无法跳转。
具体修复步骤:
- 处理广告加载失败场景:在
onAdFailedToLoad回调中关闭进度对话框,直接执行页面跳转,避免用户长时间等待。 - 处理广告显示失败场景:在
onAdFailedToShowFullScreenContent回调中关闭进度对话框,然后执行页面跳转,保证即使广告无法展示,用户也能进入下一页。 - 移除重复的进度框关闭操作:
onAdLoaded中已经调用了pd.dismiss(),onAdDismissedFullScreenContent里的重复调用可以删除,避免潜在的UI异常。 - (可选)添加错误日志:在错误分支中打印错误信息,方便后续排查广告相关问题。
修改后的完整代码:
//Start Here AdRequest adRequest = new AdRequest.Builder().build(); InterstitialAd.load(StartActivity.this, StartActivity.this.getString(R.string.main_inter), adRequest, new InterstitialAdLoadCallback() { @Override public void onAdLoaded(@NonNull InterstitialAd interstitialAd) { pd.dismiss(); mInterstitialAd = interstitialAd; mInterstitialAd.setFullScreenContentCallback(new FullScreenContentCallback(){ @Override public void onAdClicked() { // 广告点击回调 } @Override public void onAdDismissedFullScreenContent() { mInterstitialAd = null; startActivity(new Intent(StartActivity.this, MainActivity.class)); StartActivity.this.finish(); } @Override public void onAdFailedToShowFullScreenContent(AdError adError) { mInterstitialAd = null; pd.dismiss(); // 打印错误日志,方便排查 Log.e("AdMob", "广告显示失败: " + adError.getMessage()); startActivity(new Intent(StartActivity.this, MainActivity.class)); StartActivity.this.finish(); } @Override public void onAdImpression() { // 广告曝光回调 } @Override public void onAdShowedFullScreenContent() { // 广告展示回调 } }); mInterstitialAd.show(StartActivity.this); } @Override public void onAdFailedToLoad(@NonNull LoadAdError loadAdError) { mInterstitialAd = null; pd.dismiss(); // 打印错误日志,方便排查 Log.e("AdMob", "广告加载失败: " + loadAdError.getMessage()); startActivity(new Intent(StartActivity.this, MainActivity.class)); StartActivity.this.finish(); } });
补充说明:
修改后,无论广告加载成功、失败,还是显示失败,都能确保进度对话框被关闭,用户可以正常进入下一页。错误日志能帮助你快速定位广告加载或展示时的问题。
内容的提问来源于stack exchange,提问作者user20642163
相关产品推荐
相关产品推荐

