Android 惰性AdMob ads加载

Android 惰性AdMob ads加载,android,kotlin,admob,Android,Kotlin,Admob,我正在我的主要活动中加载一个简单的横幅广告。问题是,每当我启动应用程序时,它都会在白色屏幕上停留大约2秒钟,然后加载UI。 问题不在于应用程序代码,因为在我添加广告之前,应用程序通常会立即启动。这是我加载广告的代码: 在onCreate中: MobileAds.initialize(this, "ca-app-pub-#######") val mAdView: AdView = findViewById(R.id.adView) mAdView.visibili

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

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)

有没有办法在没有UI延迟的情况下加载广告

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

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

       // 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)
初始化EADS(AdView)


我希望如果有人在为同样的问题挣扎,这会有所帮助

多明建议您对MobileAds.Initialize()进行大约2000ms的后期延迟。请不要那样做。2秒后,用户界面冻结!用户会非常恼火。如果启动速度比用户刚开始使用时没有响应的应用程序慢,效果会更好。

//Kotlin code
//Kotlin Code
//Heavy tasks in Second Thread
//finally loadAd() in UI thread
Thread{
MobileAds.initialize(this);
val mAdView = findViewById<AdView>(R.id.adview);
val adRequest = AdRequest.Builder().build();
runOnUiThread {
    mAdView.loadAd(adRequest);     
}}.start();
//第二个线程中的繁重任务 //最后在UI线程中加载AD() 线{ MobileAds.初始化(此); val mAdView=findviewbyd(R.id.adview); val adRequest=adRequest.Builder().build(); runOnUiThread{ mAdView.loadAd(adRequest); }}.start();
您确定使用Android baners的测试广告单元ID吗?我已经使用AdMob生成的单元ID将应用程序推送到Play Store,但为了测试,您应该使用测试广告单元ID。我在几个小时前更新了代码,不管怎样,它确实运行得很慢。上下文:提到在测试广告中使用该ID。即使使用测试ID,我的应用程序的加载速度也很慢。一般来说,在android中使用原始线程是不好的-活动可能会在后台线程完成之前被销毁。
   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
            }
        }
    }
//Kotlin Code
//Heavy tasks in Second Thread
//finally loadAd() in UI thread
Thread{
MobileAds.initialize(this);
val mAdView = findViewById<AdView>(R.id.adview);
val adRequest = AdRequest.Builder().build();
runOnUiThread {
    mAdView.loadAd(adRequest);     
}}.start();