Admob loadAd正在阻止Ui线程

问题描述 投票:0回答:1

我最近在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线程的任何想法。

android firebase admob interstitial
1个回答
0
投票

您正在UI线程中创建AdView,这就是被阻止的原因。在进行AdView初始化时,线程不会执行其他任何操作。

您可以尝试在另一个线程中加载AdView,也可以使用AsyncTask或Handler以用户界面安全的方式加载它。

检查此内容以获取有关AsyncTask和Android中线程的更多信息。

http://developer.android.com/reference/android/os/AsyncTask.html

发件人:How to avoid Admob blocking the UI thread

© www.soinside.com 2019 - 2024. All rights reserved.