我需要从WebViewClient#shouldInterceptRequest
内的用户收集用户名和密码,因此我必须阻止WebView
IO线程,直到用户在主线程上提供用户名和密码。等待我的runnable完成的最佳方法是什么?
我目前最喜欢的方式是(为简洁省略了例外和超时):
final CountDownLatch countDownLatch = new CountDownLatch(1);
new Handler(Looper.getMainLooper()).post(new Runnable() {
public void run() {
callSomethingWithAsyncCallback(new Runnable() {
public void run() {
countDownLatch.countDown();
}
});
}
});
countDownLatch.await();
使用ExecutorService
的东西似乎更好,因为我可以简单地使用Future#get
来阻止。但是,主线程上没有运行ExecutorService
,而使用Executors
中的一个只是将其反弹到主线程似乎很浪费。想法?
答案 0 :(得分:0)
请使用AsyncTask而不是使用runnable。