星期日, 9月 11, 2011

Thread

Android應用程式筆記

今天繼續來試著了解thread。

當一個應用程式被發動時,系統為應用程式創造一個執行續,叫做"main"。這個執行續非常重要,因為它負責調度事件到適合的使用者介面部件,包括繪圖事件。它也是你的應用程式與android工具包(andoird.widget與android.view的組件)的組件互動的執行續,因此這個主執行續有時也被稱作"UI thread"。

系統並不會為每一個組件創造獨立執行續,所有在相同進程中的組件都會在UI thread中實作,且系統呼叫每一個組件都會從UI thread中調度。因此,回應系統回呼的方法(如onKeyDown()報告使用者動作或生命週期的回呼)總是運行在UI thread中。

例如,當使用者觸碰螢幕上的按鈕,你的應用程式的UI thread便調度觸碰事件給部件,UI thread依次設定觸碰事件的按下狀態並提交一個無效要求給事件對列,UI thread拿出隊列要求並通知部件應該重繪。

當你的應用程式密集地回應使用者的互動,這樣單一執行續的模式將使效能降低,除非你正確的執行你的應用程式,特別是如果每件事發生在UI thread,執行長操作如網路存取或資料庫查詢將阻塞整個使用者介面,當執行續阻塞,就沒有事件可以調度,包括繪圖事件,從使用者的視角來看,應用程式似乎掛了,更糟的是,如果UI thread被阻塞超過幾秒鐘(大約五秒鐘),使用者看到"應用程式沒有回應"。使用者可能決定退出你的應用程式,且如果他們不高興可能解除安裝你的應用程式。

因此,android工具包是不安全的,你絕不能從worker thread處理你的UI,你必須從UI thread處理你的使用者介面。

對於android單一執行續模式有簡單的兩個原則:
1.不要阻塞了UI thread。
2.不要從UI thread外面存取android UI 工具包。

沒有留言:

張貼留言