Android Admob填隙使用AsyncTask失败

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) {

我试图通过异步任务加载Admob Interstitual广告,如下所示:

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秒,我想你必须接受它(?)。入门:示例: