Android 可以在主线程上等待主线程吗?

Android 可以在主线程上等待主线程吗?,android,multithreading,Android,Multithreading,我想使用WebView作为Javascript解释器。为了检查是否已经加载了一些库,我想使用一个倒计时闩锁,它在WebViewClient的onPageFinished()方法中倒计时。看起来是这样的: public JsInterpreter(Context context) { interpreterWebView = new WebView(context); interpreterWebView.getSettings().setJavaScriptEnabled(tru

我想使用WebView作为Javascript解释器。为了检查是否已经加载了一些库,我想使用一个倒计时闩锁,它在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()方法都在主线程上运行(在我的例子中),所以当我调用Wait()时,线程停止运行,onPageFinished()永远不会被调用=>deadlock


但是是否有任何工作方法可以等待(在主线程上)加载页面?

为什么不在后台线程上调用
javaScriptRequest()
?让我们想象一下,我想向其他人展示这个方法,我告诉他“请只从后台线程调用这个方法”。首先,这会很难看,其次,我如何确保该方法确实是从后台线程调用的?您可以分叉自己的线程,而不是依赖调用方这样做。但是如果javascript请求应该计算结果,请通过JavascriptInterface将其发布到JS解释器类和javaScriptRequest()中-方法是否应返回此结果?它以同样的问题结束…重写API使其正确异步
javaScriptRequest()
不应该返回任何内容,而是应该接受某种类型的侦听器对象,当结果准备好时可以调用该对象。