原创 Android Binder 分析

開博先寫了Binder相關的分析,沒有別的原因,主要是最近在整理Binder相關的資料。Binder涉及的內容很多,許多地方我也不是很清楚。還有許多方面是在寫文檔時感覺很明白了,過幾天又會變得模糊。寫文檔時,我試圖從簡單的角度進行分析,但文

原创 Binder驅動之內存管理

內存映射 用戶空間在使用Binder進行IPC前,需要對Binder驅動進行初始化,這個過程主要執行了Binder驅動的open和mmap操作。mmap映射Binder傳輸使用的內存空間,大小爲(1M - 8K),但僅僅是進行虛擬地址空間映

原创 Binder驅動之傳輸事件

Binder驅動中每一次傳輸都代表一個傳輸事件,通過binder_transaction來描述。 struct binder_thread { struct binder_proc *proc; /* 線程所屬的而進程 */

原创 Binder驅動之debug信息與數據結構

在進行Binder debug或分析問題時,通常需要看一下當前的Binder狀態信息。Kernel通過SYS系統提供了一些文件節點供我們讀取,它們位於/sys/kernel/debug/binder/,分別爲: State:當前Binde

原创 Binder之AIDL

網上講解Aidl的文章很多,都比較詳細,這裏就不再重複了。本人更偏重與Framework和Native,對APP沒有發言權,文章中可能出現錯誤,請理解。這篇側重於一下表面看不到的實現,碎片化的做些分析。 Binder Stub Stub是B

原创 Binder之bindService

一個需要進行Binder通信的Client一般通過bindService()來啓動Service。 bindService(it, mServiceConnection, Service.BIND_AUTO_CREATE); binderS

原创 Binder驅動之死亡通知

在Binder通信建立後,Client端可能需要知道Server端的存活狀態。當Server端掛掉時,Client端需要清理與通信相關的數據和行爲,這個清理過程就是通過Binder死亡通知機制實現的。 註冊死亡通知 應用層通過調用BpBin

原创 Binder之Service Manager

Service Manager是整個Binder機制的守護進程,用來管理開發者創建的各種Server,並且向Client提供查詢Server遠程接口的功能。Service Manager在init.rc中作爲service啓動,運行在一個獨

原创 Binder驅動之最簡單的通信

在Android系統中可以所是無處不Binder,Binder傳輸在每時每刻都發生着。很多情況下,一個進程中都不會只存在一個獨立的Binder傳輸,經常是併發多個Binder傳輸,而且會存在Binder嵌套。尤其像system_server

原创 Binder之簡單實例

Binder簡介 Binder是Android中使用的進程間通信機制(IPC)。在Android系統中,應用程序是由Activity、Service、Broadcast Receiver和Content Provider四種類型的組件構成的

原创 Android MediaPlayer Playback流程分析

一個最簡單的Media Playback過程如下,僅通過五個步驟就可以完成播放。 String url = "http://........"; // your URL here MediaPlayer mediaPlayer = new

原创 Binder驅動之Buffer Size

三個傳輸空間限制 Android中,由Zygote孵化的進程是通過ProcessState來創建Binder實體的。實體創建過程中會映射一段內存空間用於數據傳輸,其大小設置爲 ((1*1024*1024) - (4096*2))。

原创 Binder驅動之設備初始化

Binder是Android使用的進程間通信工具。Android本身是一個複雜的操作系統,運行着衆多的應用和服務,它們之間的通信就顯得尤爲重要。應用程序在使用Binder進行進程間通信時,實現方法非常簡單,只需要編寫AIDL文件,系統在編譯