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

Android游戏接入插屏广告后离线触发广告时App闪退如何解决

崩溃根因

无网络环境下插屏广告无法正常加载,InterstitialAd.load触发加载失败回调,你在onAdFailedToLoad方法中将全局变量mInterstitialAd赋值为null,而触发广告展示的onBackPressed方法没有做空值校验,直接调用mInterstitialAd.show()触发空指针异常,最终导致应用崩溃。

修复方案

1. 核心修复:新增空值判断

修改onBackPressed方法,调用广告展示逻辑前先判断mInterstitialAd是否有效,无效则跳过广告展示:

@Override
public void onBackPressed() {
    super.onBackPressed();
    timer.cancel();
    // 仅在插屏广告加载完成时展示
    if (mInterstitialAd != null) {
        mInterstitialAd.show(AnagramActivity.this);
    }
    finish();
}

2. 可选优化:按需加载广告

提前判断网络状态,仅在网络可用时发起广告加载请求,减少无意义的资源消耗:

第一步:新增网络状态判断方法

private boolean isNetworkAvailable() {
    ConnectivityManager cm = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
    NetworkInfo networkInfo = cm.getActiveNetworkInfo();
    return networkInfo != null && networkInfo.isConnected();
}

第二步:修改广告加载逻辑

// 仅在网络可用时加载插屏广告
if (isNetworkAvailable()) {
    AdRequest adRequest1 = new AdRequest.Builder().build();
    InterstitialAd.load(this,"MyAd--ID", adRequest1, new InterstitialAdLoadCallback() {
        @Override
        public void onAdLoaded(@NonNull InterstitialAd interstitialAd) {
            mInterstitialAd = interstitialAd;
            Log.i("TAG", "onAdLoaded");
        }

        @Override
        public void onAdFailedToLoad(@NonNull LoadAdError loadAdError) {
            Log.i("TAG", loadAdError.getMessage());
            mInterstitialAd = null;
        }
    });
}

第三步:添加权限声明

在AndroidManifest.xml中添加网络状态访问权限(如果还未添加):

<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />

3. 其他潜在问题修复

你当前代码中newGame方法的字符串比较使用了==,Java中字符串内容比较需要使用equals方法,否则可能出现判断不生效的问题,修改如下:

// 修改前
if (tv_info.getText().toString() == "Fantastic!")
// 修改后
if ("Fantastic!".equals(tv_info.getText().toString()))

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 23:12:01