問題很簡單,我像往常一樣使用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 的交互是在子線程中的,必須注意線程安全。如果你的操作需要在主線程中完成,請一定注意!