1. 程式人生 > >Android Bug記錄--Error: Webview js呼叫報錯Error calling method on NPObject

Android Bug記錄--Error: Webview js呼叫報錯Error calling method on NPObject

其他專案組的專案需要一個簡單h5專案,需要幫忙弄個android殼,就一個頁面,只不過需要播放聲音,沒有其他任何js互動,以後也不會有什麼js拓展。於是就簡單寫了個webview,加了js回撥,並封裝了聲音播放類,在js回撥中使用。

public class Javascript {
    
    @JavascriptInterface
    public void voice(final String voiceUrl) {
         Player.getInstance().playUrl(voiceUrl);
    }
}

因為聲音播放頻率低且短,所以沒考慮太多,直接在js中播放聲音(程式碼如上),安裝後,第一次聲音播放正常,但是發現後面再也無法播放聲音了,重啟app後又可以播放一次聲音。後面在h5中加日誌後發現在js呼叫時報錯:Error calling method on NPObject.
看到日誌,猜測應該是執行緒問題了,在js回撥中加了執行緒,果然一切正常:

原文地址:簡書ThinkinLiu
個人部落格:IT老五

public class Javascript {
    ExecutorService cachedThreadPool = Executors.newCachedThreadPool();
    @JavascriptInterface
    public void voice(final String voiceUrl) {
        cachedThreadPool.execute(new Runnable() {
            @Override
            public void run() {
                Player.getInstance().playUrl(voiceUrl);
            }
        });
    }
}