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

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

BBK遠程實習總結 17.02.6

2019-11-09 17:25:54
字體:
來源:轉載
供稿:網友

本次總結的內容如下 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

`


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 丘北县| 南乐县| 旬邑县| 宁国市| 淮北市| 高密市| 高台县| 孟村| 盐津县| 洪湖市| 卓资县| 秀山| 吉木乃县| 崇州市| 宣化县| 江口县| 正镶白旗| 青州市| 龙海市| 鱼台县| 綦江县| 区。| 宕昌县| 石棉县| 蒙自县| 邵阳县| 仙游县| 饶阳县| 宾川县| 邯郸市| 蓝山县| 枣强县| 安达市| 滨海县| 北安市| 嘉定区| 霍城县| 伊川县| 南充市| 德兴市| 新沂市|