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

Ironsource Banner仅在主Activity显示 其他Activity实现后无法展示问题问询

错误根因

  • 重复初始化Ironsource SDK:你在所有Activity中都调用了IronSource.init(),该SDK全局仅需初始化1次,多次调用无广告单元参数的init方法就会触发第一个报错。
  • Banner加载请求重复:你的代码中同一banner实例连续调用了两次loadBanner方法,同时前一个Activity的banner加载任务未结束时,新Activity又触发加载请求,就会触发第二个报错。
  • 插屏监听重复设置:每个Activity都重新设置插屏广告监听器,会导致回调逻辑错乱。

修正方案

  1. 全局初始化SDK
    新建自定义Application类,在其onCreate生命周期中仅执行一次Ironsource初始化,后续所有Activity中不要再调用init方法:
public class MyApp extends Application {
    @Override
    public void onCreate() {
        super.onCreate();
        // 全局仅初始化一次
        IronSource.init(this, "APP_ID");
        IronSource.setMetaData("Facebook_IS_CacheFlag","IMAGE");
        
        // 全局仅设置一次插屏监听器即可,不需要每个Activity都设置
        IronSource.setInterstitialListener(new InterstitialListener() {
            @Override
            public void onInterstitialAdReady() {
                // 不要在就绪回调里直接触发展示,建议在业务需要展示的位置调用showInterstitial
            }
            @Override
            public void onInterstitialAdLoadFailed(IronSourceError ironSourceError) {}
            @Override
            public void onInterstitialAdOpened() {}
            @Override
            public void onInterstitialAdClosed() {
                // 插屏关闭后可预加载下一次的插屏
                IronSource.loadInterstitial();
            }
            @Override
            public void onInterstitialAdShowSucceeded() {}
            @Override
            public void onInterstitialAdShowFailed(IronSourceError ironSourceError) {}
            @Override
            public void onInterstitialAdClicked() {}
        });
        // 预加载插屏
        IronSource.loadInterstitial();
    }
}

记得在AndroidManifest.xml的application标签中配置android:name=".MyApp"。

  1. 修正单个Activity中的Banner逻辑
    每个Activity中仅保留一次banner加载调用,同时在页面销毁时销毁banner实例终止未完成的请求:
public class OtherActivity extends AppCompatActivity {
    private IronSourceBannerLayout bannerLayout;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_other);
        
        FrameLayout bannerContainer = findViewById(R.id.adview);
        bannerLayout = IronSource.createBanner(this, ISBannerSize.SMART);
        FrameLayout.LayoutParams layoutParams = new FrameLayout.LayoutParams(
            FrameLayout.LayoutParams.MATCH_PARENT,
            FrameLayout.LayoutParams.WRAP_CONTENT
        );
        bannerContainer.addView(bannerLayout, layoutParams);
        // 仅调用一次loadBanner即可,删除重复的加载调用
        IronSource.loadBanner(bannerLayout, "DefaultBanner");
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        // 页面销毁时销毁banner,终止未完成的加载请求
        if (bannerLayout != null) {
            IronSource.destroyBanner(bannerLayout);
        }
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 03:54:03