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

AdMob横幅广告首次加载正常 重启应用/连WiFi时加载失败咨询

AdMob广告加载异常问题排查与修复方案

已确认的问题根因

  • 广告初始化时机错误:你当前在MobileAds.initialize的初始化回调还没执行完成时,就直接调用runnable.run()触发广告加载,首次启动可能初始化速度快刚好能完成,重启应用后AdMob缓存状态异常时就会加载失败
  • Handler循环任务未做生命周期绑定:应用退到后台再重启时,之前的Handler定时任务没有销毁,重复的广告加载请求会触发AdMob的频率限制,直接返回加载失败
  • 没有配置广告加载回调的错误处理:你当前没有监听广告加载失败的回调,无法区分是网络限制、广告填充不足还是SDK内部错误导致的加载失败,WiFi场景下加载失败大概率是当前WiFi对应的IP段被AdMob临时限制了广告填充
  • 额外冗余问题:你代码里声明了InterstitialAd变量但完全没有使用,横幅广告刷新频率设置为60秒,超出了AdMob官方建议的最优区间,容易触发频率限制

修复后的代码实现

public class MainActivity2 extends AppCompatActivity {
    private AdView adView;
    private AdView adView2;
    private Handler handler = new Handler(Looper.getMainLooper());
    private Runnable adRefreshRunnable;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main2);
        getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);

        // 提前初始化广告View
        adView = findViewById(R.id.adView);
        adView2 = findViewById(R.id.adView2);

        // 配置广告加载错误监听
        adView.setAdListener(new AdListener() {
            @Override
            public void onAdFailedToLoad(@NonNull LoadAdError loadAdError) {
                super.onAdFailedToLoad(loadAdError);
                // 加载失败后延迟10秒重试,避免频繁请求
                handler.removeCallbacks(adRefreshRunnable);
                handler.postDelayed(adRefreshRunnable, 10000);
            }
        });

        adView2.setAdListener(new AdListener() {
            @Override
            public void onAdFailedToLoad(@NonNull LoadAdError loadAdError) {
                super.onAdFailedToLoad(loadAdError);
                handler.removeCallbacks(adRefreshRunnable);
                handler.postDelayed(adRefreshRunnable, 10000);
            }
        });

        // 初始化MobileAds,完成后再触发广告加载
        MobileAds.initialize(this, initializationStatus -> {
            Toast.makeText(getApplicationContext(), "广告SDK初始化成功", Toast.LENGTH_SHORT).show();
            adRefreshRunnable = () -> {
                AdRequest adRequest = new AdRequest.Builder().build();
                adView.loadAd(adRequest);
                adView2.loadAd(adRequest);
                Toast.makeText(getApplicationContext(), "广告已刷新", Toast.LENGTH_SHORT).show();
                // 调整刷新间隔为45秒,符合官方最优建议
                handler.postDelayed(adRefreshRunnable, 45000);
            };
            adRefreshRunnable.run();
        });
    }

    @Override
    protected void onDestroy() {
        // 页面销毁时销毁广告View、取消定时任务,避免内存泄漏和重复请求
        if (adView != null) adView.destroy();
        if (adView2 != null) adView2.destroy();
        if (handler != null) handler.removeCallbacks(adRefreshRunnable);
        super.onDestroy();
    }

    @Override
    protected void onPause() {
        if (adView != null) adView.pause();
        if (adView2 != null) adView2.pause();
        super.onPause();
    }

    @Override
    protected void onResume() {
        super.onResume();
        if (adView != null) adView.resume();
        if (adView2 != null) adView2.resume();
    }
}

附加优化建议

  • 测试阶段使用AdMob官方提供的测试广告ID,不要使用正式ID,避免因为测试阶段无效请求太多导致账号被限制
  • WiFi场景下加载失败如果持续出现,可以在广告加载失败回调里判断当前网络状态,自动触发1-2次重试,重试都失败后再等待下一个刷新周期
  • 不要在广告还没加载完成时重复调用loadAd方法,会导致之前的请求被废弃,增加加载失败概率

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 23:45:04