2012-02-15 63 views
0

在Android SDK中是否有等价的方法SwingUtilities.invokeAndWait?android invokeandwait等效

或者我可以轻松地模拟它吗?

我需要张贴从辅助线程处理到UI线程,并等待该UI完成它的执行,并返回一个值,辅助线程

回答

0

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

除此之外,看看java.util.concurrent,并找到满足您的需求,如LinkedBlockingQueue

+0

当我说“完成它的执行力”,这意味着“结束threatment执行”。我无法启动另一个线程,因为我需要使用本地线程变量。 – user954469 2012-02-16 08:18:41

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

干杯