这个问题被问得更多,但是给出了不同的解决方案,老实说我不知道这里的最佳实践是什么。
我有这样的插页式广告(Google Admob SDK):
private InterstitialAd interstitial;
然而,如果用户快速导航(在一两秒内),则广告会延迟一段时间,然后广告显示在与我想要的屏幕不同的屏幕上,或者当应用程序已经在后台时更糟。
How to pause interstitial Ads when Android application goes to background?显示一个不存在的函数(不再)。
When dismiss interstitial DFP ad on Android, the app crashes使用的广告显然与我不同...这样更好用吗?
programmatically close an Interstitial ad只是说取消它是不可能的。
我最好只想取消onDestroy()
功能中的广告并暂停(或销毁)onPause()
功能中的广告。
这可能吗?任何变通方法或不合适的方法,但我当然更喜欢干净的解决方案。
答案 0 :(得分:3)
正如威廉指出的那样,你不应该在onAdReceived上展示它。我所做的是在onAdReceived中设置一个布尔标志,然后我有一个后台线程做一个空的while循环(带有一个定时器)并在调用show()之前检查布尔值。
我仍然调用isLoaded(),但在那一点上我知道它已经加载了。我不仅仅使用isLoaded()的原因是因为它必须在UI线程上运行,我不想在等待广告加载时阻止UI。
答案 1 :(得分:1)
你应该真的展示了一些代码,但是根据你的症状,我怀疑你是从AdListener的#onAdReceived方法展示你的非页内广告。 不要这样做
您应该在应用中的自然断点处显示插页式广告。否则,您将获得所描述的行为,并提供极差的用户体验。
答案 2 :(得分:-1)
尝试此操作可在活动结束时使展示广告无效:
@Override
public void onAdClosed() {
mInterstitialAd = null;
}
@Override
public void onAdLoaded() {
if (mInterstitialAd != null)
mInterstitialAd.show();
mInterstitialAd = null;
}
@Override
public void onAdFailedToLoad(int errorCode) {
mInterstitialAd = null;
}
onDestroy / onStop() {
mIntertitial = null;
}