2012-05-14 32 views
1

這篇文章Communicating between threads section爲什麼只能通過處理程序與UI線程進行通信?

的問題尤爲嚴重,如果在新線程任務希望 修改與主UI線程相關的意見,因爲它是嚴格 禁止這樣做直接。

爲什麼禁止/禁止。

+0

組成UI將是一個痛苦的屁股,如果他們也不得不做出線程安全的..測量&佈局 - 然後是平局 - 將不得不被更新保護。從設計的角度來看,限制繪圖之間的更新是有意義的。 – Jens

+0

@Jens:那麼處理程序如何確保線程安全? – Ashwin

+1

的'Handler',如果UI線程上創建將使用與UI線程相關的'Looper'。這可是很容易地創建使用'android.os.HandlerThread'是* *無法更新UI一個'Handler'。 – Jens

回答

1

請仔細閱讀本,

它總是一個很好的做法,以保持對UI線程的UI工作,並在非UI線程非UI的工作,因爲它的蜂窩法律。 我們始終具有專用UI線程啓動,但只要我們創建另一個線程來執行一些非UI的任務,我們會被丟棄的專用UI線程,並在非UI線程的土地,一旦當我們完成我們的工作並希望將處理後的輸出放在UI線程上,因爲我們已經失去了對UI線程的引用,所以不能直接進行處理。現在Handler可以幫助獲取創建它的線程的引用。因此,在onCreate()中初始化Handler是一種很好的做法,然後在非ui線程中調用此引用。

+0

你能給我這個鏈接,你有這個解釋嗎? – Ashwin

+0

檢查YouTube上的Marakana視頻服務教程。 –

+0

是這個嗎? http://www.youtube.com/watch?v=yfWsp9IHX1Y – Ashwin

0

使用的AsyncTask <>由Android提供的,它同步的非UI線程的UI和非UI線程

方法中的AsyncTask <>

doInBackground(字符串...)//工作

postExecute(字符串結果)//獲取從非UI線程的輸出和

把輸出回到UI線程

+0

這不是我的問題。 – Ashwin

1

的處理程序,以便他們在主線程中依次執行在的MessageQueue有助於從工作線程隊列中的請求。

下面的博客文章是相當有幫助瞭解處理程序如何工作的更多:

Android – Multithreading in a UI environment

+0

這是一個非常好的鏈接。它說消息被放入隊列中。然後,他們被閒人循環並一一執行。消息如何執行。他們是否意味着updateui(消息)被放置在隊列中被循環者截斷並執行? – Ashwin

+0

是的,這就是我的理解。這裏有另一個相當有用的鏈接:http://techtej.blogspot.com/2011/02/android-passing-data-between-main.html –

+0

該鏈接更好!我在您的個人資料中注意到您是Android開發人員。你能幫助我解決這個問題嗎?http://stackoverflow.com/questions/10548530/validating-and-reading-a-word-file-in-android? – Ashwin

相關問題