Android培訓班(32) – Android移動開發技術文章_手機開發 Android移動開發教學課程

在init.rc文件裡,可以看到加載下面的服務:


service servicemanager /system/bin/servicemanager


user system


critical


onrestart restart zygote


onrestart restart media


 


servicemanager服務的代碼在目錄:


Android-2.0/frameworks/base/cmds/servicemanager


servicemanager服務的作用主要是服務管理,所謂的服務管理其實就是獲取服務、檢查服務、添加服務、枚舉所有服務。服務管理器是一個容器管理器,方便服務添加、調用和刪除。在應用層的程序,都向這個服務管理器獲取需要使用的服務,而所有提供服務的程序,都向這個服務器管理器註冊自己的服務。服務管理器是應用程序與服務溝通的橋梁。


 


下面來分析一下main函數的代碼如下:


int main(int argc, char **argv)


{


struct binder_state *bs;


void *svcmgr = BINDER_SERVICE_MANAGER;


這行代碼是設置管理器從0開始。


bs = binder_open(128*1024);


這行代碼是調用binder_open函數打開binder設備,並分配內存空間。


if (binder_become_context_manager(bs)) {


LOGE(“cannot become context manager (%s)
“, strerror(errno));


return -1;


}


調用binder_become_context_manager函數設置本服務作為服務管理器。


svcmgr_handle = svcmgr;


這行代碼是設置服務管理器處理函數。


binder_loop(bs, svcmgr_handler);


這行代碼是讓服務管理器進入循環地處理服務相關的命令。


return 0;


}

發佈留言