Android 惰性AdMob ads加载
我正在我的主要活动中加载一个简单的横幅广告。问题是,每当我启动应用程序时,它都会在白色屏幕上停留大约2秒钟,然后加载UI。 问题不在于应用程序代码,因为在我添加广告之前,应用程序通常会立即启动。这是我加载广告的代码: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
在
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();