1. 程式人生 > >UI的執行緒問題:單執行緒原因及更新UI的四種方式

UI的執行緒問題:單執行緒原因及更新UI的四種方式

1、UI執行緒為什麼設計為單執行緒? 

UI控制元件的操作不是執行緒安全的,對於多執行緒併發訪問的時候,如果使用加鎖機制會導致: 

  1. UI控制元件的操作變得很複雜。 
  2. 加鎖的操作必定會導致效率下降。 

所以android系統在UI操作上使用單執行緒機制。 

2、更新UI有四種方式:

  1. 使用Handler訊息傳遞機制:通過直接傳送message,即sendMessage(); ; 
  2. 使用AsyncTask非同步任務; 
  3. 使用runOnUiThread(action)方法;
  4. 使用Handler的post(Runnabel r)方法:通過傳送Runnable介面,即Post(Runnable)這種方式最終會呼叫sendMessageDelayed;

  Handler的post對執行緒的處理也不是真正start一個新的執行緒,而是直接呼叫了執行緒的run方法,這正是google煞費苦心搞一套

3、小結:

A 如果只是單純的想要更新UI而不涉及到多執行緒的話,使用View.post()(view再封裝,最終呼叫的還是handler.post())就可以了;

B 需要另開執行緒處理資料以免阻塞UI執行緒,像是IO操作或者是迴圈,可以使用Activity.runOnUiThread();

C 如果需要傳遞狀態值等資訊,像是藍芽程式設計中的socket連線,就需要利用狀態值來提示連線狀態以及做相應的處理,就需要使用Handler + Thread的方式;

  Handler的作用:主要是在其他後臺執行緒中,通過handler這個媒介,向UI主執行緒傳送Runnable物件(即程式碼段)

  採用傳遞訊息的方式,呼叫Handler中方法來處理訊息更新檢視。這種方式對於不是很頻繁的呼叫是可取的。如果更新的較快,則訊息處理會一直排隊處理,這樣顯示會相對滯後。

D 如果是後臺任務,像是下載任務等,就需要使用AsyncTask。