首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >延迟AdMob ads加载

延迟AdMob ads加载
EN

Stack Overflow用户
提问于 2018-11-03 11:50:02
回答 4查看 1.5K关注 0票数 3

我在我的主要活动中加载一个简单的横幅广告。问题是,每当我启动应用程序时,它在白屏幕上停留大约2秒,然后加载UI。问题不在于应用程序代码,因为在我添加ads之前,应用程序通常会立即启动。这是我加载广告的代码:

onCreate中:

代码语言:javascript
复制
MobileAds.initialize(this, "ca-app-pub-#######")
        val mAdView: AdView = findViewById(R.id.adView)
        mAdView.visibility = View.GONE
        val adRequest = AdRequest.Builder().build()
        val adView = AdView(this)
        adView.adSize = AdSize.BANNER
        adView.adUnitId = "ca-app-pub-3940256099942544/6300978111"  <- test id
        initializeAds(mAdView, adRequest)

initializeAds()

代码语言:javascript
复制
 fun initializeAds(adView: AdView, adRequest: AdRequest){
        adView.loadAd(adRequest)
        adView.adListener = object : AdListener(){
            override fun onAdLoaded() {
                super.onAdLoaded()
                if (adView.visibility == View.GONE) {
                    adView.visibility = View.VISIBLE
                }
            }

            override fun onAdFailedToLoad(p0: Int) {
                super.onAdFailedToLoad(p0)
                adView.visibility = View.GONE
            }
        }
    }

是否有任何方式可以加载广告而没有用户界面滞后?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2018-11-05 12:39:39

好了,伙计们,我终于找到了一个快速的解决办法。我发现MobileAds.initialize(context, id)AdRequest.Builder().build()是有时滞的。显然,除非完全执行onCreate,否则活动不会完全加载。为了绕过这个问题,我使用Handler来延迟MobileAds.initializeAdRequest.Builder().build,然后它不会使UI延迟。这是我更新的代码:

代码语言:javascript
复制
       // we can't delay UI tasks so we need initialize adView here - it's not heavy task anyway
        val mAdView: AdView = findViewById(R.id.adView)
        mAdView.visibility = View.GONE

        //delay ads to be displayed 2 sec after Activity is loaded
        Handler().postDelayed({
            MobileAds.initialize(this, "ca-app-pub-3940256099942544~3347511713")
            initializeAds(mAdView)
        }, 2000)

initializeAds(AdView)

代码语言:javascript
复制
   fun initializeAds(adView: AdView) {
        adView.loadAd(AdRequest.Builder().build())
        adView.adListener = object : AdListener() {
            override fun onAdLoaded() {
                super.onAdLoaded()
                //if ad is loaded just show it
                if (adView.visibility == View.GONE) {
                    adView.visibility = View.VISIBLE
                }
            }

            override fun onAdFailedToLoad(p0: Int) {
                //if we can't show ad just hide it
                super.onAdFailedToLoad(p0)
                adView.visibility = View.GONE
            }
        }
    }

我希望,如果有人正在为同样的问题而挣扎,那将有帮助。

票数 1
EN

Stack Overflow用户

发布于 2018-11-03 12:24:06

将此用作横幅广告id ca-app-pub-3940256099942544/6300978111

票数 2
EN

Stack Overflow用户

发布于 2019-11-11 16:31:02

Domin建议您为MobileAds.Initialize()做大约2000 is的延迟。请不要那样做。2秒之后,UI就冻结了!用户会非常生气的。当用户开始使用它时,如果启动速度慢于应用程序没有响应性,那就更好了。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53131021

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档