2012-02-15 60 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

乾杯