如果已经加载,如何避免加载 Admob 插页式广告?

How to Avoid Loading Admob Interstitial Ad if One is Already Loaded?

我在 baseactivity 的 oncreate 方法中加载插页式广告,这个 baseactivity 被应用程序的所有其他活动扩展,所以每次我开始一个新的 activity正在加载一个新的插页式广告,即使已经加载了一个。

private InterstitialAd mInterstitialAd;

@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        createAd();
}

    public void createAd () {

        AdRequest adRequest = new AdRequest.Builder().build();

        InterstitialAd.load(BaseActivity.this, "ca-app-pub-3940256099942544/8691691433", adRequest, new InterstitialAdLoadCallback() {

            @Override
            public void onAdLoaded(@NonNull InterstitialAd interstitialAd) {
                Toast.makeText(BaseActivity.this, "Ad Loaded",
                        Toast.LENGTH_LONG).show();
                mInterstitialAd = interstitialAd;
                mInterstitialAd.setFullScreenContentCallback(new FullScreenContentCallback(){
                    @Override
                    public void onAdDismissedFullScreenContent() {
                        // Called when fullscreen content is dismissed.
                        Toast.makeText(BaseActivity.this, "fullscreen content is dismissed.",
                                Toast.LENGTH_LONG).show();
                    }

                    @Override
                    public void onAdFailedToShowFullScreenContent(AdError adError) {
                        // Called when fullscreen content failed to show.
                        Toast.makeText(BaseActivity.this, "fullscreen content failed to show.",
                                Toast.LENGTH_LONG).show();
                    }

                    @Override
                    public void onAdShowedFullScreenContent() {
                        // Called when fullscreen content is shown.
                        // Make sure to set your reference to null so you don't
                        // show it a second time.
                        mInterstitialAd = null;
                        Toast.makeText(BaseActivity.this, "fullscreen content is shown.",
                                Toast.LENGTH_LONG).show();
                    }
                });
            }

            @Override
            public void onAdFailedToLoad(@NonNull LoadAdError loadAdError) {
                Toast.makeText(BaseActivity.this, "Ad Failed to Load",
                        Toast.LENGTH_LONG).show();
            }

        });

    }

如何在第一次创建基础 activity 时只加载一次?

在你的代码中,扩展基础 activity 的每个 activity 包含它自己的 InterstitialAd 实例 ,如果你认为如果你创建基础 activity 所以 InterstitialAd 将在你所有的活动中共享你错了(阅读继承)。

一个快速的破解方法是创建 InterstitialAd static,更好的方法是创建单例 class 或包含 InterstitialAd,甚至您可以附加 InterstitialAd 到您的应用程序 class,它本身就是一个实例。