Как избежать загрузки промежуточной рекламы Admob, если она уже загружена?

#java #android #android-activity #admob

Вопрос:

Я загружаю промежуточное объявление в методе oncreate baseactivity, эта базовая активность расширяется за счет всех других действий приложения, поэтому каждый раз, когда я начинаю новое действие, загружается новое промежуточное объявление, даже если оно уже загружено.

 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();
            }

        });

    }
 

Как загрузить их только один раз при первом создании базового действия?

Ответ №1:

В вашем коде каждое действие , расширяющее базовое действие, содержит собственный экземпляр InterstitialAd , если вы думаете, что, если вы создали базовое действие, InterstitialAd оно будет общим для всех ваших действий, вы ошибаетесь (читайте о наследовании).

Быстрый взлом состоит в том , чтобы сделать InterstitialAd static , лучший подход-создать одноэлементный класс или тот, который содержит InterstitialAd , или даже вы можете прикрепить InterstitialAd к своему классу приложения, который сам по себе является экземпляром singe.