編輯:關於Android編程
一、Server和Service Manager進程間通信
Service Manager進程啟動時,已經創建了Service Manager實體對象,沒有Service Manager本地對象。
Server首先獲取了Server代理對象,句柄值為0。沒有Server引用對象。
Server----->Service Manager
Server找到目標進程:根據Server代理對象的句柄值0,找到Service Manager實體對象,然後找到Service Manger進程,也就是目標進程。
Server傳遞的數據:包含flat_binder_object結構體,其中handle為Service Manager的引用對象的句柄值,Service Manager的引用對象引用了Server的實體對象,System的實體對象又引用了Server的本地對象。
Service Manager處理數據:svcinfo結構體ptr為Servicer Manager的引用對象句柄值,name為傳遞進來的字符串。
Service Manager----->Server
Service Manager找到目標進程:根據thread->transaction_stack->from找到目標進程,即Server進程。
Service Manager傳遞的數據:返回正確值0。
Server處理數據:Server循環等待。
二、Client和Service Manager進程間通信
Service Manager進程啟動時,已經創建了Service Manager實體對象,沒有Service Manager的本地對象。
Client首先獲取了Client代理對象,句柄值為0。沒有Client引用對象。
Client----->Service ManagerClient找到目標進程:根據Client進程代理對象的句柄值0,找到Service Manager實體對象,然後找到Service Manger進程,也就是目標進程。
Client傳遞的數據:svcinfo
結構體name那個字符串。
Service Manager處理數據:獲得binder_object結構體,其中pointer指向了Service
Manager的引用對象(引用了Server的實體對象)的句柄值。
Service Manager----->Client
Service Manager找到目標進程:根據thread->transaction_stack->from找到目標進程,即Client進程。
Service Manager傳遞的數據:傳遞的內容flat_binder_object結構體,handle為Client的引用對象(引用了Server的實體對象)的句柄值。
Client處理數據:返回Client代理對象(句柄值是上面Client引用對象的句柄值)。
三、Client和Server進程間通信
目前已經獲取了Client代理對象,Client引用對象,Server實體對象,Server本地對象。
Client----->Server
Client找到目標進程:根據Client代理對象的句柄值,首先找到Client引用對象,通過Client引用對象再找到Server的實體對象,通過Server實體對象,找到Server進程,也就是目標進程。
Client傳遞的數據:一個用於匹配的描述符。和例如GET_VALUE命令。
Server處理數據:根據找到的Server實體對象,找到Server本地對象,利用Server本地對象來執行GET_VALUE命令獲取值。
Server----->Client
Server找到目標進程:根據thread->transaction_stack->from找到目標進程,即Client進程。
Server傳遞的數據:傳遞的數據返回值是getVal獲取的值(利用Server本地對象來執行GET_VALUE命令獲取值)。
Client處理數據:把上面返回的結果讀取出來。
前言:俗話說磨刀不誤砍柴工,一個優秀的產品從一個不錯的點子直到用戶的手中,是需要一個團隊不遺余力協同合作不斷打磨出來的;同樣,一個好的App除正常的代碼編寫外,還需要經過
前言:最近因為某項目cpu,內存的使用率實在讓人不敢恭維;手機發燙,電量下降已經讓用戶無法忍受;頻繁快速迭代發版導致各種性能問題突出;由於之前產品不考慮低端手機情況,低端
突然發現好久沒有寫博客了,一直放到筆記裡面,今天update一下。最近做的一個項目中,是盒子+電視,用戶通過遙控器來操作。這裡只是說下GridView在當前業務下的簡單使
需求:模擬android系統應用設置中飛行模式的開啟與關閉,並記住設置的狀態 布局文件:fragment_main.xml 資源文件s