在下面的代码中,在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,否则我会不断收到以下错误消息:“所有WebView方法必须在同一线程上调用。”。无论如何,这不会影响您回答问题。]

最佳答案

您可以尝试使用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")

09-25 21:41