#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.