如何等待 webview.post 完成?

How to wait for webview.post to complete?

在下面的代码中,outside 打印在 inside 之前。我希望顺序是 inside,然后是 outside。那么如何确保 Runnable 在到达第二个 Log 之前完成?

webView.post(new Runnable() {
    @Override
    public void run() {
        Log.d("check", "inside");
    }
});

// some code needed here

Log.d("check", "outside");

必须在注释处插入一些代码才能实现此目的。

编辑:我正在后台服务中完成所有工作。

[P.S.: 那些对我为什么这样做感到好奇的人,是因为除非我添加 webview.post,否则我会不断收到以下错误:"All WebView methods must be called on the same thread."。无论如何,这不应该影响你回答问题。]

您可以尝试使用 CountDownLatch:

final CountDownLatch latch = new CountDownLatch(1);

webView.post(new Runnable() {
    @Override
    public void run() {
        Log.d("check", "inside");
        latch.countDown();
    }
});

// some code needed here
latch.await();

Log.d("check", "outside");

但是,您不想在 UI 线程上使用 latch.await(),因为这是一种阻塞方法。如果您想 运行 在 UI 线程上执行此操作,最好将 latch.countDown() 替换为对回调方法的调用,这又会 运行 Log.d("check", "outside").