问题很简单,我像往常一样使用JavaScriptInterface注解,加在我的方法上,以便让后台能够去调用我的方法。然而,并未如我想的一样,方法是被成功调用了,但是这里面有点问题。
代码如下:
@JavascriptInterface
public void openPage(String url, String title, String showShare) {
Logger.e("---------mall---------");
AddProjectPopupWindow addProjectPopupWindow = new AddProjectPopupWindow(mActivity);
addProjectPopupWindow.showAtLocation(x5_webview, Gravity.BOTTOM | Gravity.CENTER_HORIZONTAL, 0, 0);
}
正常来说在代码被执行时,应该弹出一个弹出一个弹窗。但是并没有弹出来,我一脸懵逼,控制台也并没有报错。貌似是我弹窗的方法有问题?放在别处是好的。忽然想起,是不是线程的问题,修改代码在主线程中运行。问题解决!
修改代码如下:
@JavascriptInterface
public void openPage(String url, String title, String showShare) {
Logger.e("---------mall---------");
mActivity.runOnUiThread(new Runnable() {
@Override
public void run() {
AddProjectPopupWindow addProjectPopupWindow = new AddProjectPopupWindow(mActivity);
addProjectPopupWindow.showAtLocation(x5_webview, Gravity.BOTTOM|Gravity.CENTER_HORIZONTAL, 0, 0);
}
});
}
由此得出:Javascript 和 Java 的交互是在子线程中的,必须注意线程安全。如果你的操作需要在主线程中完成,请一定注意!