在發佈一個簡單的「Clock」應用程序時,我發現Android要求您使用位於線程A中的android.os.Handler,以便使用來自線程B的數據結果更新線程A中的View對象。android.os.Handler類是否消除了將某些方法聲明爲synchronized的需要?
我還是比較新的Java,這是我第一次明確地處理過線程,但我知道,如果兩個不同線程想要訪問,通常你會聲明方法和/或操作同步相同的數據。不過,似乎android.os.Handler是一種特定於Android的線程間數據同步方式,因此您可以避免在我剛剛鏈接的Oracle文檔中詳細說明的classicconcurrency errors。這是真的嗎?
如果我發現自己在一個情況就是我是需要由Android操作系統使用android.os.Handler從一個線程運送到另一個數據,這是否意味着我沒有要申報用於將數據導出爲同步的方法?
這就是我喜歡能夠將多個答案標記爲正確答案的時代。這也是一個很好的解釋。 – scriptocalypse 2011-03-04 20:26:29
此外,這解釋了爲什麼我不需要一個Looper爲我的特定示例(處理程序屬於活動的「主」線程,它已經有一個活套)。時鐘的運行線程使用主要活動的handler.post(runnable);方法。再次感謝您的解釋。 – scriptocalypse 2011-03-04 20:49:00
順便說一句,我檢查和'MessageQueue'確實同步。 – bigstones 2012-09-04 13:06:01