我有一个webview,它运行在主线程上,我调用webview. loadurl("www.example.com")https://www.google.com")
装载良好。
webview有如下设置,所以javascript函数调用一些本机函数。
添加Javascript接口(此,名称)
并且该类有一个带@Javascript接口注解的方法
@JavascriptInterface
fun getTestData(){
**webview.loadURL("https://www.facebook.com")**
}
粗体的**webview. loadURL("www.example.com")**崩溃,并显示以下错误:https://www.facebook.com在线程"JavaBridge"上调用了WebView方法。必须在同一线程上调用所有WebView方法。(预期在Looper(JavaBridge,tid 1144){e018910}上调用了Looper Looper(main,tid 2){95d9516},仅供参考主Looper是Looper(main,tid 2){95d9516}) java.lang.Throwable: A WebView method was called on thread 'JavaBridge'. All WebView methods must be called on the same thread. (Expected Looper Looper (main, tid 2) {95d9516} called on Looper (JavaBridge, tid 1144) {e018910}, FYI main Looper is Looper (main, tid 2) {95d9516})
我已经检查了线程,webview正在主线程上运行,虽然控件在方法getTestData()下,但线程是javabridge。
任何帮助都将不胜感激
2条答案
按热度按时间mitkmikd1#
在UI线程中运行代码,JS接口在其他一些线程中调用(看起来像)
从堆栈跟踪:
必须在同一线程上调用所有WebView方法
并且您始终在UI线程中创建
WebView
示例(因为这是View
,所以应该绘制...)此外,如果您在
Activity
中,则可以使用runOnUiThread{}
yyhrrdl82#
您需要调用Android Web视图相关的UI线程的东西。