我想将WebView用作Javascript-Interpreter。为了检查是否已经加载了某些库,我想使用一个CountDownLatch,它在WebViewClient的onPageFinished()方法中倒计时。它看起来像这样:
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()永远不会被调用=&gt ;死锁。
但有没有任何工作方法等待(在主线程上)正在加载的页面?