如何等待 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")
.
在下面的代码中,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")
.