android上的多**服務是有乙個叫做
mediaserver
的服務程序提供的。這個程序通過
binder
mediaserver伺服器程序的實現**在
/frameworks/base/media/mediaserver
目錄下,**很小。
該目錄下的android.mk
檔案:
local_path:
=$(call my-dir)
include
$(clear_vars)
local_src_files:=\
main_mediaserver.cpp
local_shared_libraries :=
\libaudioflinger \
libcameraservice \
libmediaplayerservice \
libutils \
libbinder
base :=
$(local_path)/.
./..
local_c_includes :=
\$(base)
/libs/audioflinger \
$(base)
/camera/libcameraservice \
$(base)
/media/libmediaplayerservice
local_module:
=mediaserver
include
$(build_executable)
最後編譯出來的是mediaserver
,這個程序可以在模擬器或裝置系統中的
/system/sbin/
目錄下找到。
伺服器程序的實現原始碼:
// system headers required for setgroups, etc.
#include
#include
#include
#include
#include
#include
#include
log.h>
#include
#include
#include
#include
#include
<
private
/android_filesystem_config.h>
using
namespace
android;
intmain(
intargc,
char**
argv)
[1]
也就是說,在啟動系統的時候,mediaserver
會啟動,這樣也會隨之新增了服 務:
media.audio_flinger, media.player, media.camera, media.audio_policy。
這些服務會響應來自上層的mediaplayer
[2]在以上main()
函式中,
defaultservicemanager()
函式獲取到當前的服務管理器
(iservicemanager)
。//iservicemanager類是乙個介面,主要定義的介面函式有:
virtual
spgetservice(
const
string16&
name)
const=0;
// 獲取某個服務(若該服務不存在,則阻塞幾秒鐘)
virtual
spcheckservice(
const
string16&
name)
const=0;
// 檢查某個服務(若服務不存在,不阻塞)
virtual
status_t addservice(
const
string16&
name,
const
sp&service)=0;
// 新增乙個服務
virtual
vector
listservices()=
0;
// 列舉所有服務
MediaServer 目錄結構
深入理解android卷i audiofllinger 音訊系統中的核心服務 audiopolicyservice 音訊系統中關於音訊策略的重要服務 mediaplayerservice 多 系統中的重要服務 cameraservice 有關攝像 照相的重要服務 frameworks base li...
TOPSQL 簡單分析
正在學習oracle中,如果有什麼不對的地方,請牛大大們多多指正!目錄 2.4 按 parse calls 查詢topsql資訊 2.5按sharable mem 查詢topsql資訊 3.檢視sql 執行計畫 正文 1.topsql成因 產生top sql 的原因,細化起來有以下原因 1 表結構設...
sizeof簡單分析
include include typedef struct t1 a typedef struct t2 b a aa b bb int main void int b int malloc 20 sizeof int char str1 ab 0cde 0fg char str2 ab 0cde...