為何要在主執行緒上更新UI
像UIKit這樣大的框架上確保執行緒安全是一個重大的任務,會帶來巨大的成本。UIKit不是執行緒安全的,假如在兩個執行緒中設定了同一張背景圖片,很有可能就會由於背景圖片被釋放兩次,使得程式崩潰。或者某一個執行緒中遍歷找尋某個subView,然而在另一個執行緒中刪除了該subView,那麼就會造成錯亂。apple有對大部分的繪圖方法和諸如UIColor等類改寫成執行緒安全可用,可還是建議將UI操作保證在主執行緒中。
事實上在子執行緒中如果要對其他UI 進行更新,必須等到該子執行緒執行結束,而對響應使用者點選的Button的UI更新則是及時的,不管他是在主執行緒還是在子執行緒中做的更新,意義都不大了,因為子執行緒中對所有其他ui更新都要等到該子執行緒生命週期結束才進行。
在子執行緒中是不能進行UI 更新的,我們看到的UI更新其實是子執行緒程式碼執行完畢了,又自動進入到了主執行緒,執行了子執行緒中的UI更新的函式棧,這中間的時間非常的短,就讓大家誤以為分執行緒可以更新UI。如果子執行緒一直在執行,則子執行緒中的UI更新的函式棧 主執行緒無法獲知,即無法更新。只有極少數的UI能直接進行UI更新,因為開闢執行緒時會獲取當前環境,如點選某個按鈕,這個按鈕響應的方法是開闢一個子執行緒,在子執行緒中對該按鈕進行UI 更新是能及時的,如上面的換背景圖,但這沒有任何意義。
相關文章
- 如何在子執行緒中更新UI執行緒UI
- 分析為什麼有時在非UI執行緒更新UI會崩潰UI執行緒
- Android中子執行緒更新主執行緒UI和ProgressBar的應用Android執行緒UI
- HashMap為何執行緒不安全HashMap執行緒
- iOS拾遺——為什麼必須在主執行緒操作UIiOS執行緒UI
- Android中子執行緒真的不能更新UI嗎?Android執行緒UI
- Android 中子執行緒真的不能更新UI嗎?Android執行緒UI
- Android複習之旅--子執行緒更新UIAndroid執行緒UI
- Android子執行緒真的不能更新UI麼Android執行緒UI
- Control的Invoke和BeginInvoke 是相對於支線執行緒(因為一般在支線執行緒中呼叫,用來更新主執行緒ui)Invoke立即插入主執行緒中執行,而BeginInvoke 要等主執行緒結束才執行執行緒UI
- Android新執行緒中更新主執行緒UI中的View方法彙總Android執行緒UIView
- MFC UI執行緒UI執行緒
- 保證執行緒在主執行緒執行執行緒
- iOS 在主執行緒操作UI不能保證安全iOS執行緒UI
- runloop解決Cell上主執行緒卡頓OOP執行緒
- Android的Activity啟動與子執行緒更新UIAndroid執行緒UI
- 關於“UI執行緒”UI執行緒
- Java執行緒池核心執行緒用盡後為何優先排隊而不是繼續建立執行緒直至最大執行緒數?Java執行緒
- 主執行緒中也不絕對安全的 UI 操作執行緒UI
- 主佇列&主執行緒佇列執行緒
- QT 主執行緒子執行緒互相傳值QT執行緒
- 為什麼不要在Linux上只執行開源軟體?Linux
- 子執行緒與UI執行緒的通訊(委託)執行緒UI
- 程式執行緒篇——執行緒切換(上)執行緒
- 模擬主執行緒等待子執行緒的過程執行緒
- Android 不能在子執行緒中更新 UI 的討論和分析Android執行緒UI
- 老問題:Android子執行緒中更新UI的3種方法Android執行緒UI
- 淺談執行緒池(上):執行緒池的作用及CLR執行緒池執行緒
- HashMap為何執行緒不安全?HashMap,HashTable,ConcurrentHashMap對比HashMap執行緒
- 多執行緒C++更新MYSQL執行緒C++MySql
- 主執行緒等待所有其他執行緒執行完畢,然後再繼續執行主執行緒的邏輯,有以下幾種方法可以實現:執行緒
- 子執行緒 UI 問題捉蟲執行緒UI
- android 關於關於子執行緒更新UI的一些事Android執行緒UI
- opatch需要在ORACLE_HOME為10.1.3下執行 ??Oracle
- 為什麼dispatch_sync在主執行緒會死鎖執行緒
- WPF 之 呼叫執行緒必須為 STA,因為許多 UI 元件都需要執行緒UI元件
- 【騏程】多執行緒(上)執行緒
- 執行緒池管理(1)-為什麼需要執行緒池執行緒