Java 来自工作线程时,Android Webview loadUrl不起作用
我正在开发一个包含web视图的应用程序。在应用程序运行期间的特定时间,它会调用Webview loadUrl 有时,调用将直接来自UI线程上的事件,有时则来自后台工作线程上的事件。当它起源于后台线程时,我调用runonuihead()以确保对loadURL的实际调用发生在UI线程上 我所经历的是,loadUrl()在从UI线程发起时可以正常工作,但当它来自工作线程时则无法工作(即使对loadUrl的实际调用是通过runnable I传递到RunnuithRead()中) 设置了断点后,我可以看到在这两种情况下,loadUrl()都是在UI线程上被调用的。然而,它在一种情况下有效,但在另一种情况下无效 我目前正在筛选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()中) 设置了断点后,我可以看到
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
}
});