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