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
相关产品推荐
相关产品推荐

