在下面的代码中,在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方法都必须在同一个线程上调用。"。无论如何,这不应该影响你回答这个问题。]
答案 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")
。