webview中Java與JavaScript交互時的線程問題

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章