1.检查WebView的执行环境,防止WebView在非UI线程执行loadurl方法。
2.为WebView添加WebViewClient,重写shouldOverrideUrlLoading方法,以便在发送消息前取消pendingMessages,如下所示:
public class MyWebChromeClient extends WebChromeClient {
......
}
public class MyWebViewClient extends WebViewClient {
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
view.stopLoading();
return false;
}
}
private void sendMsg() {
Message msg = mHandler.obtainMessage(MSG_DO_STH);
mHandler.forceSend(msg);
}
3.使用反射来修复这个问题,以下是一个示例代码:
try {
Method postMessageMethod = LocalMessageUtils.getPostMessageMethod();
postMessageMethod.invoke("XXX");
} catch (Exception e) {
e.printStackTrace();
}
在这里,getPostMessageMethod()方法返回对WebViewTransport.postMessage()方法的引用,该方法已被取消,但无法在发布中删除。
注意:反射可能不是最佳的解决方案,因为可能不适用于所有版本的Android系统。