Android - 内部'用于'循环在外循环

时间:2016-06-13 19:00:11

标签: java android multithreading

我有这个嵌套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代码工作。

任何帮助都将不胜感激。

1 个答案:

答案 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
    }
}