1. 程式人生 > >《老羅的Android之旅》閱讀筆記——IPC機制Binder

《老羅的Android之旅》閱讀筆記——IPC機制Binder


Android系統Binder機制中的四個元件Client、Server、Service Manager和Binder驅動程式的關係:

  • Service Manager成為Binder守護程序的過程

原始碼路徑:frameworks/base/cmds/servicemanager

成為Android程序間通訊(IPC)機制Binder守護程序的過程:

        1. 開啟/dev/binder檔案:open("/dev/binder", O_RDWR);

        2. 建立128K記憶體對映:mmap(NULL, mapsize, PROT_READ, MAP_PRIVATE, bs->fd, 0);

        3. 通知Binder驅動程式它是守護程序:binder_become_context_manager(bs);

        4. 進入迴圈等待請求的到來:binder_loop(bs, svcmgr_handler);

Binder驅動程式中建立了三個結構體:

一個struct binder_proc結構、

一個struct  binder_thread結構、

一個struct binder_node結構

  • Server和Client獲得Service Manager的過程

獲取Service Manager遠端介面的函式是defaultServiceManager

    gDefaultServiceManager = new BpServiceManager(new BpBinder(0));  

Server和Client拿到這個Service Manager遠端介面之後:

 對Server來說,就是呼叫IServiceManager::addService這個介面來和Binder驅動程式互動了,即呼叫BpServiceManager::addService

 對Client來說,就是呼叫IServiceManager::getService這個介面來和Binder驅動程式互動了

  • 分析原始碼瞭解Server的啟動過程

IServiceManager::addService過程中MediaPlayerService、ServiceManager和BinderDriver之間的互動作:

  • Client獲得了Server的遠端介面過程

獲取MediaPlayerService這個遠端介面的本質:從Service Manager中獲得MediaPlayerService的一個控制代碼

    intr = new BpMediaPlayerService(new BpBinder(handle));  
  • Android系統應用程式框架層的用Java語言來實現的Binder介面

通過JNI來呼叫基於C/C++語言的Binder執行庫來為Java應用程式提供程序間通訊服務

1. 獲取Service Manager的Java遠端介面的過程;

2. HelloService介面的定義;

3. HelloService的啟動過程;

4. Client獲取HelloService的Java遠端介面的過程;

5.  Client通過HelloService的Java遠端介面來使用HelloService提供的服務的過程。

相關推薦

Android閱讀筆記——IPC機制Binder

Android系統Binder機制中的四個元件Client、Server、Service Manager和Binder驅動程式的關係: Service Manager成為Binder守護程序的過程原始碼路徑:frameworks/base/cmds/servicema

Android系統程序間通訊 IPC 機制Binder中的Server啟動過程原始碼分析

                        在前面一篇文章中,介紹了在Android系統中Binder程序間通訊機制中的Server角色是如何獲得Service Manager遠端介面的,即defaultServiceManager函式的實現。Server獲得了Service Manager遠端介面之後,

Android閱讀筆記——Activity啟動過程

ActivityManagerService啟動Activity的過程大致如下圖所示: 在這個圖中,ActivityManagerService和ActivityStack位於同一個程序中,而ApplicationThread和ActivityThread位於另一個程序

Android閱讀筆記——Launcher和Zygote的啟動過程

Launcher啟動過程            系統中的應用程式安裝好了以後, SystemServer元件接下來就通過ActivityManagerService來啟動Home應用程式Launcher了, Launcher在啟動的時候便會通過PackageManagerS

Android閱讀筆記——廣播(Broadcast)機制

使用廣播的兩個步驟: 1. 廣播的接收者需要通過呼叫registerReceiver函式告訴系統,它對什麼樣的廣播有興趣,即指定IntentFilter,並且向系統註冊廣播接收器,即指定BroadcastReceiver  2. 廣播的傳送者通過呼叫sendBroadc

Android閱讀筆記——SurfaceFlinger服務

Android應用程式請求SurfaceFlinger服務渲染自己的UI可以分為三步曲: 首先是建立一個到SurfaceFlinger服務的連線, 接著再通過這個連線來建立一個Surface, 最後請求SurfaceFlinger服務渲染該Surface。 根據Surfa

Android 導讀PPT

     Android系統使用的Linux核心包含了一些專用驅動,例如Logger、Binder、Ashmem、Wakelock、Low-Memory Killer和Alarm等,這些Android專用驅動構成了Android執行時的基石。Android執行時從下到上又包括了HAL層、應用程式框架層和應用程

Android——Android應用程式的Activity啟動過程簡要介紹和學習計劃

在Android系統中,Activity和Service是應用程式的核心元件,它們以鬆藕合的方式組合在一起構成了一個完整的應用程式,這得益於應用程式框架層提供了一套完整的機制來協助應用程式啟動這些Activity和Service,以及提供Binder機制幫助它們相

在《Android》系列開始,遇到讀取不到hello裝置內容的可以看一下這裡

com_android_server_HelloService.cpp的hello_getVal()在編譯的時候一直報錯: error: invalid conversion from 'int*' to 'int' 在模擬器中讀取時hard/

專訪昇陽:Android

「編者按」CSDN人氣博主羅昇陽將攜他的《Android系統原始碼情景分析》一書做客CSDN社群問答欄目,擔任第九期的嘉賓,屆時會接受廣大網友的提問,歡迎各位網友前來與羅昇陽老師一起探討Android系統。他一直致力於從原始碼角度來研究Android系統,詮釋現代化移動作業系統的實現原理。以下為採訪正文:

構建閱讀筆記

.cn htm logs com .com cnblogs log html http 1.http://www.cnblogs.com/a1264393659/p/5610786.html 2.http://www.cnblogs.com/a1264393659/p/56

構建閱讀筆記03

比較 文字 不存在 沒有 時間 開發程序 失去 人在 想法 在團隊的合作中,代碼的規範性很重要,其可以分為兩個部分,一個是代碼行為規範,主要是文字的規定,二是代碼設計規範。牽涉到程序設計,模塊之間的關系,設計模式等方面的通用原則。如果一個人的代碼沒有任何的規範性

構建閱讀筆記01

style 提高自己 結合 bsp 思想 宋體 玩具 spa nbsp 構建之法閱讀筆記01 在網上找到《構建之法》這本書的電子版,經過幾天的閱讀瀏覽,對於這本書,我覺得有很多的優點,但是更多的有一種感覺,這本書更註重的對編程者的思想的啟發。書裏提供了很多的實例以及模型或者

浪潮閱讀筆記01

微軟公司 發展 應該 協議 新的 bsp 用戶 自己 微軟 浪潮之巔閱讀筆記01 這本書是一本IT行業歷史書,從一百年前算起,AT&T 公司、IBM 公司、蘋果公司、英特爾公司、微軟公司、思科公司、雅虎公司和Google公司都先後被幸運地推到了浪尖。雖然,它們來自不

構建閱讀筆記02

了解 不同 開發流程 功能設計 軟件工程 好的 學習 階段 3.3 構建之法閱讀筆記02

構建閱讀筆記04

總結 求和 應該 核心 最有 交流 工作量 開發 分支 敏捷開發原則:1.盡早並持續地交付有價值的軟件以滿足顧客需求。2.敏捷流程歡迎需求的變化,並利用這種變化來提高用戶的競爭優勢 3.經常發布可用的軟件,發布間隔可以從幾周到幾個月,能短則短 4.業務人員和開發

構建閱讀筆記05

產品 交互 一個 閱讀 自己 設計 問題 決定 應該   典型用戶不再是一個抽象的概念,而應該是一個活生生的人。一個典型用戶描述了一組用戶的典型技巧、能力、需要、想法、工作習慣和工作環境。在設計軟件的過程中,我們往往會以自己使用產品的習慣對軟件行業的熟悉程度出發設計,忘記

構建閱讀筆記04

規模 對待 構建 思路 階段 學會 力量 適合 功能模塊 構建之法閱讀筆記04 發布日期:2017.6.16 通過結對合作,令我意識到了編寫程序不僅僅要自己能明白,也要便與他人查看和理解自己的程序。 4.1大節提到的代碼規範,我們編寫代碼時要註重代碼風格規

浪潮閱讀筆記06

數字處理 雅虎 斯坦福 系統 超過 初創 最有 過渡 高端 浪潮之巔閱讀筆記06 發布日期:2017.6.16 第一章 帝國的余輝(AT&T) 貪婪,短視是帝國 (AT&T) 轟然倒塌的根源。 第二章 藍色巨人( IBM ) 保守的改革者。 專註

構建閱讀筆記 01

規則 規範 麻煩 簡單的 筆記 合作 閱讀 編碼格式 錯誤   在之前做作業的時候,總是習慣性地直接code,結果經常花更多時間停下來思考,這樣反而會更耽誤時間,提高了出錯的幾率。之前的編碼格式也不是很規範,命名規則很亂,總是找比較簡單的變量進行命名,這樣無疑也會對團隊合作