Android培訓班(32)

來源:互聯網
上載者:User

在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;

}

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.