0

我想使用 WebView 作为 Javascript 解释器。为了检查是否已经加载了一些库,我想使用在 WebViewClient 的 onPageFinished() 方法中倒计时的 CountDownLatch。它看起来像这样:

public JsInterpreter(Context context) {
    interpreterWebView = new WebView(context);
    interpreterWebView.getSettings().setJavaScriptEnabled(true);
    interpreterWebView.setWebViewClient(new WebViewReadyListener());

    webViewReadyCountDownLatch = new CountDownLatch(1);
    interpreterWebView.loadUrl(/*javascriptLibrary*/);
}

public void javaScriptRequest(String request) {
    webViewReadyCountDownLatch.await();
    interpreterWebView.loadUrl( "javascript:" + request );
}

private class WebViewReadyListener extends WebViewClient {
    @Override
    public void onPageFinished (WebView view, String url) {
        webViewReadyCountDownLatch.countDown();
    }
}

首先,我认为这是一个好主意,因为像这样我可以等待库被加载,但是当我调用我的 javaScriptRequest() 方法时,我不需要处理侦听器。但是我忘记了 javaScriptRequest() 和 onPageFinished() 方法都在主线程上运行(在我的情况下),所以当我调用 await() 时线程停止运行并且 onPageFinished() 永远不会被调用 =>僵局。

但是是否有任何可行的方法来等待(在主线程上)加载页面?

4

0 回答 0