Android 线程中的WebView可以';无法创建
我有一些线程,我在其中创建一些视图并准备显示它们。其中我还有一个网络视图。此代码在线程中执行:Android 线程中的WebView可以';无法创建,android,multithreading,android-widget,android-webview,looper,Android,Multithreading,Android Widget,Android Webview,Looper,我有一些线程,我在其中创建一些视图并准备显示它们。其中我还有一个网络视图。此代码在线程中执行: WebView lGraphWebView = null; try{ lGraphWebView = new WebView(AppController.getAppController()); }catch (Exception e) { Log.d("info", "error: " +e ); }
WebView lGraphWebView = null;
try{
lGraphWebView = new WebView(AppController.getAppController());
}catch (Exception e) {
Log.d("info", "error: " +e );
}
它抛出以下异常:
java.lang.RuntimeException: Can't create handler inside thread that has not called Looper.prepare()
这有点奇怪,因为当我创建一个简单的按钮时,一切都正常。那么,有谁能向我解释一下为什么在创建WebView时我会遇到这个异常,如果Looper.prepare()
可以在这里提供帮助?
提前谢谢 不应在主UI线程以外的线程中创建或操作视图。例如,您可以使用发布到UI线程:
private Handler handler = new Handler();
handler.post(new Runnable() {
public void run() {
lGraphWebView = new WebView(AppController.getAppController());
}
});
通常,在主线程之外创建视图是不安全的 在您的特定情况下,这是不允许的,因为
WebView
在其构造函数中创建Handler()
,以便与UI线程通信。但由于Handler
的默认构造函数将自身附加到当前线程,并且当前线程没有运行Looper
,因此您将获得此异常
您可能认为创建一个活套线程(至少在WebView
期间必须处于活动状态)可能会对您有所帮助,但这实际上是一种冒险的做法。我不推荐
您应该坚持在主线程中创建WebView
s。所有控件通常都是为快速构建而优化的,因为它们几乎总是在UI线程中创建的