1

我可以使用 AsyncTask 加载 admob 广告吗?

我已经尝试过了,但在运行时我收到很多警告并且广告没有加载

我创建新 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 阻塞。

编辑。

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

我正在尝试在后台加载广告,因为它似乎会阻止几秒钟,我不想阻止我的活动界面。

阅读这篇文章如何避免 Admob 阻塞 UI 线程,建议避免 UI 阻塞应该使用 AsyncTask

那么我想知道是否可以在后台加载广告..?

4

3 回答 3

3

问题是您在doInBackground方法中使用不在UI线程中的视图。只需在线程中调用的onPostExecute(调用 after doInBackground)或onPreExecute(调用 before doInBackground)方法中处理您的视图。AsyncTaskUI

于 2012-07-06T05:12:02.670 回答
1

将创建需要在 UI 线程上完成的 AdView 所需的时间与与广告服务器通信和投放广告所需的时间分开。“阻止”或“滞后”可能是广告 SDK 的线程试图让广告向您展示。由于它必须通过 Internet 执行此操作,因此广告出现需要时间。我真的不认为 AdMob 在尝试获取广告时会阻止 UI 线程,但是在您看到屏幕上显示的所有 UI 小部件项目(按钮、文本字段、图像等)之间会有明显的延迟您的活动以及广告出现的时间。

于 2012-07-06T05:40:16.780 回答
0

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

根据您的性能需求,您可能需要查看以下帖子。它很好地总结了为什么使用 AsyncTask 比直接创建自己的线程效率低: Android 基础:在 UI 线程中运行代码

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

于 2015-01-11T11:56:55.047 回答