2012-07-06 95 views
1

我可以使用AsyncTask加载admob广告吗?Admob不能与AsyncTask合作

我都尝试过,但我得到很多的警告,在运行时和广告未加载

的警告,当我创建新的AdView实例

07-06 09:57:31.170: W/webview(1113): java.lang.Throwable: Warning: A WebView method was called on thread 'AsyncTask #1'. All WebView methods must be called on the UI thread. Future versions of WebView may not support use on other threads. 

我的方法是这样的

一个
@Override 
protected AdView doInBackground(Activity... activityParam) 
{ 
     Looper.prepare();    
     activity = activityParam[0]; 
     // Create the adView 
     AdView adView = new AdView(activity, AdSize.BANNER, "xxxxxxxxxxxxx");     
     return adView;   
} 

请告知,如果这应该在所有非UI线程调用,唯一的原因,我这样做,以避免阻塞UI ..

编辑。

可能是我没有正确表达我的问题,

我试图加载背景的广告,因为它似乎阻止几秒钟, 我不想阻止我的活动界面。

阅读这篇文章How to avoid Admob blocking the UI thread其中建议,以避免阻塞UI应该使用的AsyncTask

所以我想知道,如果是交替在后台加载广告的..?

+0

我只是按照示例,并在UI线程中添加adview,而不是把它放在一个AsyncTask。 – 2012-07-06 05:08:50

+0

@MorrisonChang我做到了这一点,但后来我看到了一些滞后,然后我在我的问题中提到的帖子显示了哪些建议在AsyncTask上完成 – Ahmed 2012-07-06 05:22:06

回答

1

分离出需要在UI线程上完成的创建AdView所需的时间以及与广告服务器进行通信并投放广告所需的时间。 '阻止'或'滞后'可能是广告SDK试图让广告展示给您的主题。因为它必须通过互联网来完成,所以广告出现需要时间。我真的不认为AdMob会在试图获取广告时屏蔽UI线程,但是当您看到屏幕上显示的所有UI widget项目(按钮,文本框,图像等)之间会有明显的延迟您的活动和广告何时出现。

3

问题是您使用doInBackground方法中的视图不在UI线程中。只需要在UI线程中调用的AsyncTaskonPostExecute(调用后doInBackground)或onPreExecute(调用前doInBackground)方法中查看您的视图。

0

只有在UI线程内处理代码时,才会显示Admob横幅和插页式广告。

根据您的性能需求,您可能需要查看以下文章。它包括为什么使用的AsyncTask是直接创建自己的线程效率较低的一个很好的总结: Android basics: running code in the UI thread

在下面的链接,您可以找到如何使用线程30秒的经常性工作中使用插页式教程:http://www.6020peaks.com/2015/01/how-to-use-admob-interstitials-from-a-non-ui-thread-in-android/