什么是Binder渴邦?簡單描述下它的工作過程和使用場景
什么是 Binder
Binder 是 Android 中的一種跨進(jìn)程的通信方式簇宽。采用 C/S 架衫樊,是客戶端和服務(wù)端通信的媒介咒唆,Binder 十分適合 Android 系統(tǒng)冒嫡,性能高效,只會復(fù)制一次熏矿;安全性高已骇,每個進(jìn)程有自己的 UID。
Binder 還可以理解為一種虛擬的物理設(shè)備票编,它的設(shè)備驅(qū)動是 /dev/binder褪储。
工作過程
服務(wù)端在初始化時在 ServiceManager 注冊,客戶端使用的時候向 ServiceManager 請求查找對應(yīng)的服務(wù)慧域。framework 層中服務(wù)端間接繼承自 Binder鲤竹,客戶端間接繼承自 BinderProxy 代理類∥袅瘢客戶端通過 Bidner 向服務(wù)器發(fā)起請求辛藻,這個過程是同步的,客戶端會被掛起直到接收到服務(wù)端的回應(yīng)互订,Binder 中把請求的信息寫入到 Parcel 對象 data 中吱肌,調(diào)用 transact 將請求發(fā)給服務(wù)端,服務(wù)端收到后仰禽,回調(diào) onTransact 方法氮墨,在線程中處理纺蛆,讀取之前的 data 數(shù)據(jù),將處理后的數(shù)據(jù)寫入 reply 中规揪,返回給 Binder桥氏。這樣就完成了一次調(diào)用過程。
image
使用場景
- 四大組件的啟動猛铅。AMS 是 Binder字支,ApplicationThread 也是 Binder。
- App 多進(jìn)程模塊互相調(diào)用奕坟,或者 App 之間通信祥款。