android invokeand等效

时间:2012-02-15 18:44:44

标签: android multithreading

Android SDK中是否有与SwingUtilities.invokeAndWait相同的方法?

或者我可以轻松模仿它吗?

我需要从辅助线程向UI线程发布一个处理,并等待UI完成执行并将值返回给辅助线程

2 个答案:

答案 0 :(得分:0)

首先,这可能不是一个好主意。允许用户按下HOME按钮,BACK按钮,接听电话等,在这种情况下,UI可能不会完成其执行"以任何有意义的方式。一旦将结果发送到主应用程序线程,后台线程终止就会更好,然后主用户线程可以在用户对这些结果执行某些操作时分叉另一个线程。

除此之外,请查看java.util.concurrent并找到符合您需求的内容,例如LinkedBlockingQueue

答案 1 :(得分:0)

我知道这有点晚了,但万一它可能会有所帮助。创建一个AndroidUtilities类:

public class AndroidUtilities {
    public static void runOnUiThreadAndWait(Activity act, final Runnable runnable) {
        synchronized (runnable) {
            act.runOnUiThread(new Runnable() {
                public void run() {
                    runnable.run();
                    synchronized (runnable) {
                        runnable.notify();
                    }
                }
            });
            try {
                runnable.wait();
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }
}

工作线程中的用法:

AndroidUtilities.runOnUiThreadAndWait(act, new Runnable() {...});

必须明确地进行同步:EDT必须执行UI代码和notify,而工作线程必须将UI代码提交给EDT并wait

干杯