我需要在满足两个条件时执行一段代码。
对于1),我只是在Activity的onCreate()和doInBackground中启动AsyncTask,我查询DB以获取Subject文本并将其存储在Activity的成员变量中。
对于2),我向UI线程发布了一个Runnable,在run()中,我查询了视图的维度并将其存储在Activity的成员变量中。也可以在onCreate()中完成。
无法保证哪一个(1或2)将首先完成。
因此我的问题是,等待1和2完成的推荐模式是什么 在执行一段代码之前?
答案 0 :(得分:2)
我认为您可以使用CountDownLatch
旨在解决这些问题。
首先,您需要在代码中的某处创建一个锁存器,在1)之前的某处和2)
CountDownLatch latch = new CountDownLatch(2); // wait for 2 threads;
在您的每项操作中,完成后,在countDown
实例上调用latch
latch.countDown();
在某些情况下,如果您的两个主题都必须完整,请在await
实例上调用latch
latch.await(); // Will block. Will resume after both thread are completed
答案 1 :(得分:0)
我认为当您在onPostExecute中使用Async完成第一个任务时(因为它将在您的第一个任务完成时调用),您可以在UI线程上发布runnable,或者直接获取视图的度量维度,然后执行您的部分你想要的代码。
答案 2 :(得分:0)
我以前做过的方式非常简单。我只是在线程完成时设置了一个布尔值。然后我从每个线程调用一个方法来检查两个值是否为真。有点像这样:
onPostExecute(){
queryComplete = true;
checkThreadCompleted();
}
onPostExecute(){
viewMeasured = true;
checkThreadCompleted();
}
private void checkThreadCompleted(){
if(queryComplete && viewMeasured){
//Do something
}
}