如何通过Looper.getMainLooper()实现插屏广告加载失败延迟重试?
插屏广告加载失败后延迟重试实现方案
你可以通过Handler结合Looper.getMainLooper()实现延迟重试逻辑,在每次加载失败后等待指定时长再发起下一次请求。以下是修改后的完整代码:
@Override protected void onResume() { super.onResume(); requestNewInterstitial(5); } private void requestNewInterstitial(int maxRetry) { AdRequest adRequest = new AdRequest.Builder().build(); InterstitialAd.load(Activityone.this, getString(R.string.interid), adRequest, new InterstitialAdLoadCallback() { @Override public void onAdLoaded(@NonNull InterstitialAd interstitialAd) { mInterstitialAd = interstitialAd; } @Override public void onAdFailedToLoad(@NonNull LoadAdError loadAdError) { if (maxRetry > 0) { mInterstitialAd = null; // 延迟2秒后发起重试,可根据需求调整时长(单位:毫秒) new Handler(Looper.getMainLooper()).postDelayed(() -> { requestNewInterstitial(maxRetry - 1); }, 2000); } } }); } btnPause.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { if (mInterstitialAd != null) { mInterstitialAd.show(Activityone.this); mInterstitialAd.setFullScreenContentCallback(new FullScreenContentCallback() { @Override public void onAdDismissedFullScreenContent() { } @Override public void onAdFailedToShowFullScreenContent(@NonNull AdError adError) { } }); } } });
关键说明:
- 用
new Handler(Looper.getMainLooper())确保延迟任务在主线程执行,因为广告请求相关操作必须在主线程调用 - 延迟时长设为2000毫秒(2秒),可根据业务需求自行调整数值
- 每次重试时
maxRetry自动递减,直到数值为0时停止重试
内容的提问来源于stack exchange,提问作者Eldestornillador
相关产品推荐
相关产品推荐

