本次總結的內容如下 1.Handler,Thread,HandlerThread的區別 2.Handler體系的原理 3.Android多線程與多進程
與Looper進行溝通,獲得其中的消息,并完成消息的具體處理
Looper實現對消息隊列的管理,一個線程只可有一個Looper
用于管理Message的消息隊列
用于存儲消息的具體信息
為了方便理解,我們假設是在主線程中使用的Handler (1)首先我們在主線程中 newHandler 綁定到了主線程中的Looper (2)post出去的消息也就發到了UI線程中Looper的消息隊列中 (3)Looper循環處理Message中的消息其實是回調了 Handler中的處理方法 (4)同時Looper是在它綁定的的線程里執行處理方法的,其實就相當于在UI線程中執行了處理代碼,也就可以更新UI了。
在java中常用的線程類,在Android中我們一般會創建子線程以完成耗時任務,以避免主線程阻塞(ANR
)。
只需要繼承Thread類,然后重寫run
方法即可。
Handler體系中的核心類,用于實現處理Message的邏輯
本質上是一個包含了Looper的的Thread
當位于非UI線程我們需要使用Handler體系時,需要自己手動創建一個Looper,并且進行PRepare
和`start,如果我們使用HandlerThread,在這其中已經幫我們完成以上操作,應該說方便了一點。
HandlerThread將loop轉到子線程中處理,說白了就是將分擔MainLooper的工作量,降低了主線程的壓力,使主界面更流暢。
開啟一個線程起到多個線程的作用。處理任務是串行執行,按消息發送順序進行處理。HandlerThread本質是一個線程,在線程內部,代碼是串行處理的。
但是由于每一個任務都將以隊列的方式逐個被執行到,一旦隊列中有某個任務執行時間過長,那么就會導致后續的任務都會被延遲處理。
HandlerThread擁有自己的消息隊列,它不會干擾或阻塞UI線程。
對于網絡IO操作,HandlerThread并不適合,因為它只有一個線程,還得排隊一個一個等著。
當某個應用組件啟動且該應用沒有運行其他任何組件時,Android 系統會使用單個執行線程為應用啟動新的 linux 進程。默認情況下,同一應用的所有組件在相同的進程和線程(稱為“主”線程)中運行。 如果某個應用組件啟動且該應用已存在進程(因為存在該應用的其他組件),則該組件會在此進程內啟動并使用相同的執行線程。 但是,您可以安排應用中的其他組件在單獨的進程中運行,并為任何進程創建額外的線程。
每一個應用有一個UID,相當于Linux中的一個用戶。每一個PID可以對應多個PID(進程號)。正常情況下,每一個應用都運行在自己的用戶空間中,不能訪問其他應用的數據。
在一個APP中開啟多個進程,可以通過在Androidmanifest中相應的組件中添加Android:preocess屬性,如果以:開頭,那么這個進程就是應用的私有進程,如果不,那么其他應用可以設置sharedUserID跑在這個進程中。
在自己開發的系統中,可以讓系統組件跑在系統進程中以獲得相應權限
滿足以下兩個條件的應用可以跑在同一進程,這樣就可以互相訪問數據了。 1. Androidmanifest文件根標簽下的sharedUserId相同 2. 簽名相同
應用啟動時,系統會為應用創建一個名為“主線程”的執行線程。 此線程非常重要,因為它負責將事件分派給相應的用戶界面小部件,其中包括繪圖事件。 此外,它也是應用與 Android UI 工具包組件(來自 android.widget 和 android.view 軟件包的組件)進行交互的線程。因此,主線程有時也稱為 UI 線程。 系統不會為每個組件實例創建單獨的線程。運行于同一進程的所有組件均在 UI 線程中實例化,并且對每個組件的系統調用均由該線程進行分派。 因此,響應系統回調的方法(例如,報告用戶操作的 onKeyDown() 或生命周期回調方法)始終在進程的 UI 線程中運行。
因為主線程負責UI的更新與管理,如果耗時操作不在子線程中處理,會讓UI線程阻塞并且出現ANR。
Android系統中應用程序之間不能共享內存,在android SDK中提供了4種用于跨進程通訊的方式。這4種方式正好對應于android系統中4種應用程序組件:Activity、Content Provider、Broadcast和Service。 PS:具體方法因篇幅原因不在這里詳述
有部分內容轉載自其他博主 http://www.cnblogs.com/hanyonglu/archive/2012/04/12/2443262.html http://blog.csdn.net/androidflying007/article/details/53509710
`
新聞熱點
疑難解答