国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

BBK遠程實習總結 17.02.6

2019-11-09 16:21:30
字體:
來源:轉載
供稿:網友

本次總結的內容如下 1.Handler,Thread,HandlerThread的區別 2.Handler體系的原理 3.Android多線程與多進程

Handler體系以及原理

體系成員

Handler

與Looper進行溝通,獲得其中的消息,并完成消息的具體處理

Looper

Looper實現對消息隊列的管理,一個線程只可有一個Looper

MessageQueue

用于管理Message的消息隊列

Message

用于存儲消息的具體信息

基本流程

文字描述

為了方便理解,我們假設是在主線程中使用的Handler (1)首先我們在主線程中 newHandler 綁定到了主線程中的Looper (2)post出去的消息也就發到了UI線程中Looper的消息隊列中 (3)Looper循環處理Message中的消息其實是回調了 Handler中的處理方法 (4)同時Looper是在它綁定的的線程里執行處理方法的,其實就相當于在UI線程中執行了處理代碼,也就可以更新UI了。

圖片

基本流程

Thread,Handler,HandlerThread

Thread

java中常用的線程類,在Android中我們一般會創建子線程以完成耗時任務,以避免主線程阻塞(ANR)。

使用

只需要繼承Thread類,然后重寫run方法即可。

Handler

Handler體系中的核心類,用于實現處理Message的邏輯

HandlerThread

本質上是一個包含了Looper的的Thread

作用

當位于非UI線程我們需要使用Handler體系時,需要自己手動創建一個Looper,并且進行PRepare和`start,如果我們使用HandlerThread,在這其中已經幫我們完成以上操作,應該說方便了一點。

特點

HandlerThread將loop轉到子線程中處理,說白了就是將分擔MainLooper的工作量,降低了主線程的壓力,使主界面更流暢。

開啟一個線程起到多個線程的作用。處理任務是串行執行,按消息發送順序進行處理。HandlerThread本質是一個線程,在線程內部,代碼是串行處理的。

但是由于每一個任務都將以隊列的方式逐個被執行到,一旦隊列中有某個任務執行時間過長,那么就會導致后續的任務都會被延遲處理。

HandlerThread擁有自己的消息隊列,它不會干擾或阻塞UI線程。

對于網絡IO操作,HandlerThread并不適合,因為它只有一個線程,還得排隊一個一個等著。

Android中的多進程與多線程

概述

當某個應用組件啟動且該應用沒有運行其他任何組件時,Android 系統會使用單個執行線程為應用啟動新的 linux 進程。默認情況下,同一應用的所有組件在相同的進程和線程(稱為“主”線程)中運行。 如果某個應用組件啟動且該應用已存在進程(因為存在該應用的其他組件),則該組件會在此進程內啟動并使用相同的執行線程。 但是,您可以安排應用中的其他組件在單獨的進程中運行,并為任何進程創建額外的線程。

多進程

UID和PID

每一個應用有一個UID,相當于Linux中的一個用戶。每一個PID可以對應多個PID(進程號)。正常情況下,每一個應用都運行在自己的用戶空間中,不能訪問其他應用的數據。

一個應用含多個進程

在一個APP中開啟多個進程,可以通過在Androidmanifest中相應的組件中添加Android:preocess屬性,如果以:開頭,那么這個進程就是應用的私有進程,如果不,那么其他應用可以設置sharedUserID跑在這個進程中。

影響

全局變量和單例模式失效創建多個application線程同步機制完全失效

多個應用跑在同一進程

在自己開發的系統中,可以讓系統組件跑在系統進程中以獲得相應權限

實現

滿足以下兩個條件的應用可以跑在同一進程,這樣就可以互相訪問數據了。 1. Androidmanifest文件根標簽下的sharedUserId相同 2. 簽名相同

多線程

UI線程

應用啟動時,系統會為應用創建一個名為“主線程”的執行線程。 此線程非常重要,因為它負責將事件分派給相應的用戶界面小部件,其中包括繪圖事件。 此外,它也是應用與 Android UI 工具包組件(來自 android.widget 和 android.view 軟件包的組件)進行交互的線程。因此,主線程有時也稱為 UI 線程。 系統不會為每個組件實例創建單獨的線程。運行于同一進程的所有組件均在 UI 線程中實例化,并且對每個組件的系統調用均由該線程進行分派。 因此,響應系統回調的方法(例如,報告用戶操作的 onKeyDown() 或生命周期回調方法)始終在進程的 UI 線程中運行。

不要阻塞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

`


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 阿克陶县| 关岭| 彰化市| 阳城县| 文安县| 巴青县| 达日县| 金山区| 孝昌县| 邯郸市| 阿拉善右旗| 咸宁市| 延长县| 屏东县| 丰县| 佛教| 平定县| 马尔康县| 侯马市| 陕西省| 鹤壁市| 绥芬河市| 察哈| 凤阳县| 城步| 临湘市| 宁城县| 开鲁县| 铁力市| 淅川县| 通海县| 区。| 治多县| 嘉峪关市| 峨眉山市| 铁岭县| 乐安县| 玉溪市| 澄城县| 偏关县| 正阳县|