2012-11-18 112 views
2

我基本上是在這封郵件的底部做代碼帖子。 foobar()將事件發佈到公共狀態機中。 我也有觸發屏幕事件發佈到公共狀態機。 這是真的,通過使用處理程序我沒有同步問題? (即,我的狀態機不會因爲觸摸甚至是foobar事件而同時發出消息)?Android處理程序,定時器和多線程

private Handler handler = new Handler(); 
handler.postDelayed(runnable, 100); 


private Runnable runnable = new Runnable() { 
    @Override 
    public void run() { 
     /* do what you need to do */ 
     foobar(); 
     /* and here comes the "trick" */ 
     handler.postDelayed(this, 100); 
    } 
}; 

回答

0

Handler對象的相同的實例將通過傳遞給它的選擇上的Looper消息/可運行的隊列(主線程默認情況下)加工。

所以不行,如果你發送一個消息列表給處理程序,它們將一次運行1次,但不會並行。

但是如果你擔心同步問題,你應該在圍繞一個公共對象的方法中使用代碼synchronize(object) {},這樣他們就會等待該公共對象的鎖定,這意味着你可以從任何地方調用該方法,並且永遠不會運行與使用synchronize(object) {}的任何其他代碼並行。