是否可以在主线程上等待主线程?

时间:2012-10-06 23:24:59

标签: android multithreading

我想将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 ;死锁。

但有没有任何工作方法等待(在主线程上)正在加载的页面?

0 个答案:

没有答案