我最近在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线程的任何想法。
您正在UI线程中创建AdView,这就是被阻止的原因。在进行AdView初始化时,线程不会执行其他任何操作。
您可以尝试在另一个线程中加载AdView,也可以使用AsyncTask或Handler以用户界面安全的方式加载它。
检查此内容以获取有关AsyncTask和Android中线程的更多信息。
http://developer.android.com/reference/android/os/AsyncTask.html