首页 > 解决方案 > Admob loadAd 正在阻止 Ui 线程

问题描述

我最近在 Admob 上苦苦挣扎,因为我的loadAd方法是冻结整个应用程序。没有太多要说的,但它发生在发布或调试时,并且取决于设备。

发生这种情况时isAdIdFakeForDebugLogging出现错误,但仅在调试中。在发布时,任何地方都没有 admob 跟踪。但我的代码永远不会超越ad.loadAd(request)方法。它无限期地保持在那里加载。

我在我的应用程序中调用该prepareInterstitialBanner()方法onResume。该方法如下所示:

 fun prepareInterstitialBanner() {
        try {
            if (ad?.isLoaded == true || ad?.isLoading == true) {
                return //Already loading
            }

            ad = InterstitialAd(activity).apply {
                adUnitId = activity.getString(R.string.INSTERSTITIAL_AD_ID)
                adListener = object : AdListener() {
                    override fun onAdLoaded() {
                        Grove.i { "Ad loaded" }
                    }

                    override fun onAdClosed() {
                        Grove.i { "Ad closed" }
                        activity.finish()
                    }

                    override fun onAdFailedToLoad(p0: Int) {
                        Grove.i { "Ad failed to load: $p0" }
                    }
                }
            }
            Grove.i { "Loading Interstitial ad" }
            ad!!.loadAd(prepareRequestBuilder())
        } catch (e: Exception) {
            Grove.e(e) { "Ad failed to load" }
            Crashlytics.logException(e)
        }
    }

   private fun prepareRequestBuilder(): AdRequest {
        return AdRequest.Builder()
            .addTestDevice(AdRequest.DEVICE_ID_EMULATOR)
            .addTestDevice("XXX")
            .addTestDevice("XXXX")
            .build()
    }

几周内我没有更改任何代码,它现在停止工作。有没有人想过这个问题?此外,关于如何将其移至 BG 线程的任何想法。

标签: androidfirebaseadmobinterstitial

解决方案


推荐阅读