什麼是Binder?php
爲何要使用Binder?技術博客大總結linux
詳細一點說,主要有兩個方面的緣由:android
性能方面git
安全方面github
Binder中是如何進行線程管理的?面試
總結binder講的是什麼?segmentfault
Android中進程和線程的關係?緩存
一個APP通常對應一個進程和有限個線程安全
爲什麼須要進行IPC?服務器
多進程形成的影響可總結爲如下四方面
Binder的工做流程是怎樣的?
binder工做流程圖以下所示:
Binder主要能提供哪些功能?
Binder通訊機制原理是怎樣的?
Binder運行機制是怎樣的?
Binder通訊的四個角色:
Binder機制有什麼優點
Android中跨進程通信的幾種方式?
Android 跨進程通訊,像intent,contentProvider,廣播,service均可以跨進程通訊。
實際開發中,有哪些場景使用Binder進行數據傳輸?
經過AIDL實現方式解釋Binder數據傳輸的具體過程
AIDL原理是什麼?如何優化多模塊都使用AIDL的狀況?
AIDL接口:繼承IInterface。 Stub類:Binder的實現類,服務端經過這個類來提供服務。 Proxy類:服務器的本地代理,客戶端經過這個類調用服務器的方法。 asInterface():客戶端調用,將服務端的返回的Binder對象,轉換成客戶端所須要的AIDL接口類型對象。返回對象: 若客戶端和服務端位於同一進程,則直接返回Stub對象自己; 不然,返回的是系統封裝後的Stub.proxy對象。 asBinder():根據當前調用狀況返回代理Proxy的Binder對象。 onTransact():運行服務端的Binder線程池中,當客戶端發起跨進程請求時,遠程請求會經過系統底層封裝後交由此方法來處理。 transact():運行在客戶端,當客戶端發起遠程請求的同時將當前線程掛起。以後調用服務端的onTransact()直到遠程請求返回,當前線程才繼續執行。
爲什麼說Binder相比傳統的Socket性能更高效?
爲什麼說Binder相比傳統IPC安全性更高?
Service Manager是如何成爲一個守護進程的?
Service Manager在用戶空間的源代碼位於frameworks/base/cmds/servicemanager目錄下,主要是由binder.h、binder.c和service_manager.c三個文件組成。Service Manager的入口位於service_manager.c文件中的main函數:
int main(int argc, char **argv){ struct binder_state *bs; void *svcmgr = BINDER_SERVICE_MANAGER; bs = binder_open(128*1024); if (binder_become_context_manager(bs)) { LOGE("cannot become context manager (%s)\n", strerror(errno)); return -1; } svcmgr_handle = svcmgr; binder_loop(bs, svcmgr_handler); return 0; }
Server和Client是如何得到Service Manager接口的?
在Android系統的Binder機制中,Server和Client拿到這個Service Manager遠程接口以後怎麼用呢?