我有这个嵌套for循环:
for(int i = 0; shouldContinue && i < in.size(); i++){
final int l = i;
getActivity().runOnUiThread(new Runnable() {
@Override
public void run() {
sb.setSpan(fcs, 0, l, Spannable.SPAN_INCLUSIVE_INCLUSIVE);
tv.setText(sb);
}
});
for(int j = 0; shouldContinue && j < in.get(i).length(); j++){
//some code
}
}
此代码有两个线程关联。主(UI)线程和for循环工作的后台线程。问题是,内循环是在外循环中的tv.setText(sb)之前执行它的代码,我需要反过来发生这种情况。我认为这与它们是两个独立的线程这一事实有关,但我不确定如何在进入内部循环之前使runOnUIThread
代码工作。
任何帮助都将不胜感激。
答案 0 :(得分:1)
您可以使用CountDownLatch
来实现此目标:
for(int i = 0; shouldContinue && i < in.size(); i++){
...
CountDownLatch latch = new CountDownLatch(1);
getActivity().runOnUiThread(new Runnable() {
@Override
public void run() {
sb.setSpan(fcs, 0, l, Spannable.SPAN_INCLUSIVE_INCLUSIVE);
tv.setText(sb);
latch.countDown();
}
});
latch.await();
for(int j = 0; shouldContinue && j < in.get(i).length(); j++){
//some code
}
}