Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/199.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
Java 来自工作线程时,Android Webview loadUrl不起作用_Java_Android_Multithreading_Webviewrunonuithread - Fatal编程技术网

Java 来自工作线程时,Android Webview loadUrl不起作用

Java 来自工作线程时,Android Webview loadUrl不起作用,java,android,multithreading,webviewrunonuithread,Java,Android,Multithreading,Webviewrunonuithread,我正在开发一个包含web视图的应用程序。在应用程序运行期间的特定时间,它会调用Webview loadUrl 有时,调用将直接来自UI线程上的事件,有时则来自后台工作线程上的事件。当它起源于后台线程时,我调用runonuihead()以确保对loadURL的实际调用发生在UI线程上 我所经历的是,loadUrl()在从UI线程发起时可以正常工作,但当它来自工作线程时则无法工作(即使对loadUrl的实际调用是通过runnable I传递到RunnuithRead()中) 设置了断点后,我可以看到

我正在开发一个包含web视图的应用程序。在应用程序运行期间的特定时间,它会调用Webview loadUrl

有时,调用将直接来自UI线程上的事件,有时则来自后台工作线程上的事件。当它起源于后台线程时,我调用runonuihead()以确保对loadURL的实际调用发生在UI线程上

我所经历的是,loadUrl()在从UI线程发起时可以正常工作,但当它来自工作线程时则无法工作(即使对loadUrl的实际调用是通过runnable I传递到RunnuithRead()中)

设置了断点后,我可以看到在这两种情况下,loadUrl()都是在UI线程上被调用的。然而,它在一种情况下有效,但在另一种情况下无效

我目前正在筛选Android Webview的源代码,看看是否能找到它为什么有时有效,有时无效。如果有人能解释这件事,我们将不胜感激

---更新---

我在这里尝试了这篇文章中的一些建议:

在调用loadUrl之前,主要执行以下操作:

webView.clearCache(true);
webView.loadUrl("Url");
以及:


不幸的是,它们都不起作用。

一般来说,在主线程之外创建视图是不安全的

在您的特定情况下,这是不允许的,因为WebView在其构造函数中创建Handler(),以便与UI线程通信。但由于处理程序的默认构造函数将自身附加到当前线程,并且当前线程并没有运行循环器,所以会出现此异常

您可能认为创建一个活套线程(必须至少和WebView一样长时间处于活动状态)可能会对您有所帮助,但这实际上是一种冒险的做法。我不推荐

您应该坚持在主线程中创建WebView。所有控件通常都是为快速构建而优化的,因为它们几乎总是在UI线程中创建的

或者你可以这样叫webview

runOnUiThread(new Runnable() {

            @Override
            public void run() {
                //    your webview method

            }
        });
runOnUiThread(new Runnable() {

            @Override
            public void run() {
                //    your webview method

            }
        });