Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/181.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 线程中的WebView可以';无法创建_Android_Multithreading_Android Widget_Android Webview_Looper - Fatal编程技术网

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线程中创建的