如何等待webview.post完成?

时间:2015-06-13 10:51:35

标签: android multithreading webview runnable

在下面的代码中,在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");

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

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

[PS:那些好奇为什么我这样做的人,是这样的,因为除非我添加webview.post,否则我会收到以下错误:"所有WebView方法都必须在同一个线程上调用。"。无论如何,这不应该影响你回答这个问题。]

1 个答案:

答案 0 :(得分:1)

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