问题描述:
在一次测试中,直接在 @JavascriptInterface 方法中调用了 WebView.loadUrl("javascript:xxx()");,结果 js 方法没有响应。当时以为是调用频繁或者页面刷新导致无法接收到消息,进一步测试发现在 Logcat 中有输出日志:
即 java.lang.RuntimeException: java.lang.Throwable: A WebView method was called on thread 'JavaBridge'. All WebView methods must be called on the same thread.
解决方案:
这个问题是由于 js 方法在子线程中执行导致的异常,WebView 相关的方法需要在主线程中执如下:
runOnUiThread(new Runnable() {
@Override
public void run() {
这里调用js的方法
}
});