在多執行緒中,子執行緒更新主執行緒ui有哪些方法及注意點

2025-03-16 01:45:19 字數 1620 閱讀 4899

1樓:

執行緒同步問題,乙個是資源鎖問題,乙個是介面呼叫。

為什麼要在主執行緒更新ui

2樓:網友

像uikit這樣大的框架上確保執行緒安全是乙個重大的任務,會帶來巨大的成本。uikit不是執行緒安全的,假如在兩個執行緒中設定了同一張背景**,很有可能就會由於背景**被釋放兩次,使得程式崩潰。或者某乙個執行緒中遍歷找尋某個subview,然而在另乙個執行緒中刪除了該subview,那麼就會造成錯亂。

事實上在子執行緒中如果要對其他ui 進行更新,必須等到該子執行緒執行結束,而對響應使用者點選的button的ui更新則是及時的,不管他是在主執行緒還是在子執行緒中做的更新,意義都不大了,因為子執行緒中對所有其他ui更新都要等到該子執行緒生命週期結束才進行。

在子執行緒中是不能進行ui

更新的,我們看到的ui更新其實是子執行緒**執行完畢了,又自動進入到了主執行緒,執行了子執行緒中的ui更新的函式棧,這中間的時間非常的短,就讓大家誤以為分執行緒可以更新ui。如果子執行緒一直在執行,則子執行緒中的ui更新的函式棧。

主執行緒無法獲知,即無法更新。只有極少數的ui能直接進行ui更新,因為開闢執行緒時會獲取當前環境,如點選某個按鈕,這個按鈕響應的方法是開闢乙個子執行緒,在子執行緒中對該按鈕進行ui

更新是能及時的,如上面的換背景圖,但這沒有任何意義。

為什麼更新ui都放在主執行緒中

3樓:匿名使用者

原因有2個:

1、在子執行緒中是不能進行ui 更新的,而可以更新的結果只是乙個幻像:因為子執行緒**執行完畢了,又自動進入到了主執行緒,執行了子執行緒中的ui更新的函式棧,這中間的時間非常的短,就讓大家誤以為分執行緒可以更新ui。如果子執行緒一直在執行,則子執行緒中的ui更新的函式棧 主執行緒無法獲知,即無法更新。

2、只有極少數的ui能,因為開闢執行緒時會獲取當前環境,如點選某個按鈕,這個按鈕響應的方法是開闢乙個子執行緒,在子執行緒中對該按鈕進行ui 更新是能及時的,如換標題,換背景圖,但這沒有任何意義。

個執行緒取到資料,如何更新到主執行緒ui上面

4樓:司馬刀劍

方法有兩種:

通過繼承thread類,重寫run方法來實現通過繼承介面runnable實現多執行緒。

主要接受子執行緒傳送的資料, 並用此資料配合主執行緒更新ui.

handler的主要作用:主要用於非同步訊息的處理handler的執行過程:

當(子執行緒)發出乙個訊息之後,首先進入乙個(主執行緒的)訊息佇列,傳送訊息的函式即刻返回,而在主執行緒中的handler逐個的在訊息佇列中將訊息取出,然後對訊息進行處理。這樣就實現了跨執行緒的ui更新(實際上還是在主執行緒中完成的)。

這種機制通常用來處理相對耗時比較長的操作,如訪問網路比較耗時的操作,讀取文大檔案,比較耗時的操作處理等。

在大白話一點的介紹它的執行過程:

啟動應用時android開啟乙個主執行緒。

也就是ui執行緒) ,如果此時需要乙個耗時的操作,例如:

聯網讀取資料,或者讀取本地較大的乙個檔案的時候,你不能把這些操作放在主執行緒中,如果你放在主執行緒中的話,介面會出現假死現象(這也就是你在主執行緒中直接訪問網路時會提示你異常的原因,如我們上篇文章所述android主執行緒不能訪問網路異常解決辦法)。

c 多執行緒程式設計問題,C 多執行緒程式設計問題

如果兩個執行緒能同時執行,那麼效能可以提高一半,這裡有個前提條件 你的程式執行時被分配兩個cpu核心,並且執行過程中沒有意外的中斷。在實際的環境中,作業系統的程序數和執行緒數總是多於cpu核心的數量,你不能保證程式的每次執行總能獲得合適的cpu數以及執行過程中不會被中斷,也許某一次的執行是所有執行緒...

什麼是多執行緒保護技術

多執行緒 英語 multithreading 是指從軟體或者硬體上實現多個執行緒併發執行的技術。具有多執行緒能力的計算機因有硬體支援而能夠在同一時間 執行多於一個執行緒,進而提升整體處理效能。具有這種能力的系統包括對稱多處理機 多核心處理器以及晶片級多處理 chip level multithrea...

如何實現springMVC的多執行緒併發

自1 threadlocal為解決多執行緒程式的併發問題提供了一種新的思路 2 對於多執行緒資源共享的問題,同步機制採用了 以時間換空間 的方式,而threadlocal採用了 以空間換時間 的方式。前者僅提供一份變數,讓不同的執行緒排隊訪問,而後者為每一個執行緒都提供了一份變數,因此可以同時訪問而...