Android Admob填隙使用AsyncTask失败
我试图通过异步任务加载Admob Interstitual广告,如下所示:Android Admob填隙使用AsyncTask失败,android,firebase,admob,ads,Android,Firebase,Admob,Ads,我试图通过异步任务加载Admob Interstitual广告,如下所示: private class AdLoaderTask extends AsyncTask<InterstitialAd, Integer, InterstitialAd> { InterstitialAd mLocalInterstitialAd; protected InterstitialAd doInBackground(InterstitialAd... ads) {
private class AdLoaderTask extends AsyncTask<InterstitialAd, Integer, InterstitialAd> {
InterstitialAd mLocalInterstitialAd;
protected InterstitialAd doInBackground(InterstitialAd... ads) {
mLocalInterstitialAd = ads[0];
AdRequest.Builder builder = new AdRequest.Builder();
if (BuildConfig.DEBUG) {
builder.addTestDevice("XXXX");
}
AdRequest adRequest = builder.build();
mLocalInterstitialAd.loadAd(adRequest);
return mLocalInterstitialAd;
}
protected void onPostExecute(Long result) {
if (mLocalInterstitialAd.isLoaded()) {
setLoadedInterstitialAd(mLocalInterstitialAd);
} else {
loadInterstitialAd(mLocalInterstitialAd);
}
}
}
私有类AdLoaderTask扩展异步任务{
间质性多灶性间质;
受保护的Interstitalad doInBackground(Interstitalad…ads){
mLocalInterstitialAd=ads[0];
AdRequest.Builder=新的AdRequest.Builder();
if(BuildConfig.DEBUG){
builder.addTestDevice(“XXXX”);
}
AdRequest AdRequest=builder.build();
多发性脊髓灰质炎(adRequest);
返回MLOCALINTERSTIALAD;
}
受保护的void onPostExecute(长结果){
if(mLocalInterstitialAd.isload()){
设置加载的机构间AD(MLOCALINTERSTIALAD);
}否则{
负荷间隙(MLOCALINTERSTIALAD);
}
}
}
我得到一个例外:
07-21 11:11:32.898 E/AndroidRuntime(14359): Caused by: java.lang.RuntimeException: Can't create handler inside thread that has not called Looper.prepare()
07-21 11:11:32.898 E/AndroidRuntime(14359): at android.os.Handler.<init>(Handler.java:200)
07-21 11:11:32.898 E/AndroidRuntime(14359): at android.os.Handler.<init>(Handler.java:114)
07-21 11:11:32.898 E/AndroidRuntime(14359): at com.google.android.gms.ads.internal.prefetch.b.<init>(:com.google.android.gms.DynamiteModulesA:37)
07-21 11:11:32.898 E/AndroidRuntime(14359): at com.google.android.gms.ads.internal.prefetch.b.<init>(:com.google.android.gms.DynamiteModulesA:31)
07-21 11:11:32.898 E/AndroidRuntime(14359): at com.google.android.gms.ads.internal.c.<init>(:com.google.android.gms.DynamiteModulesA:106)
07-21 11:11:32.898 E/AndroidRuntime(14359):原因:java.lang.RuntimeException:无法在未调用Looper.prepare()的线程内创建处理程序
07-21 11:11:32.898 E/AndroidRuntime(14359):在android.os.Handler.(Handler.java:200)
07-21 11:11:32.898 E/AndroidRuntime(14359):在android.os.Handler.(Handler.java:114)
07-21 11:11:32.898 E/AndroidRuntime(14359):位于com.google.android.gms.ads.internal.prefetch.b.(:com.google.android.gms.DynamiteModulesA:37)
07-21 11:11:32.898 E/AndroidRuntime(14359):位于com.google.android.gms.ads.internal.prefetch.b.(:com.google.android.gms.DynamiteModulesA:31)
07-21 11:11:32.898 E/AndroidRuntime(14359):在com.google.android.gms.ads.internal.c.(:com.google.android.gms.DynamiteModulesA:106)
这是否意味着即使任务本身是从UI线程执行的,也不能通过AsyncTask加载ads
如何避开这个问题?
MobileAds.initialize和setAdUnitId似乎在异步任务中起作用。我错过什么了吗?不使用AsyncTask时Ads加载正常。可以通过服务加载?不要尝试使用异步任务;admob异步加载广告,并包含一个AdListener
类,您可以扩展该类以接收onAdLoaded()
,onAdFailedToLoad()
等的回调。请参见很明显,我缺少了一些东西,因为刚刚被否决了……我没有对admob做任何事情,但我可以想象它已经异步完成了它所能做的一切。你确定你需要把它放在一个异步任务中吗?我确定现在你不应该把它放在一个异步任务中。。。ad.loadAd(adRequest)通过admob启动异步加载,但在Xperia Z1上的UI线程上运行该命令大约需要0.5秒,我想你必须接受它(?)。入门:示例: