




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領
文檔簡介
1、AndroidSystemProperty分析FromSystem Property代碼中量存在:SystemProperties.set()/SystemProperties.get();通過這兩個接可以對系統(tǒng)的屬性進讀取/設置,顧名思義系統(tǒng)屬性,肯定對整個系統(tǒng)全局共享。通常程序的執(zhí)以進程為單位各相互獨,如何實現(xiàn)全局共享呢?System Properties是怎么回事,是如何實現(xiàn)的呢?屬性系統(tǒng)是android的個重要特性。它作為個服務運,管理系統(tǒng)配置和狀態(tài)。所有這些配置和狀態(tài)都是屬性。每個屬性是個鍵值對(key/value pair),其類型都是字符串。這些屬性可能是有些資源的使狀態(tài),進程的
2、執(zhí)狀態(tài),系統(tǒng)的特有屬性可以通過命令adb shell :getprop查看機上所有屬性狀態(tài)值。或者 getprop init.svc.bootanim制定查看某個屬性狀態(tài)使setprop init.svc.bootanim start 設置某個屬性的狀態(tài)特別屬性 :如果屬性名稱以“ro.”開頭,那么這個屬性被視為只讀屬性。旦設置,屬性值不能改變。如果屬性名稱以“persist.”開頭,當設置這個屬性時,其值也將寫/data/property。如果屬性名稱以“net.”開頭,當設置這個屬性時,“net.change”屬性將會動設置,以加到最后修改的屬性名。(這是很巧妙的。 netresolve模
3、塊的使這個屬性來追蹤在net.*屬性上的任何變化。)屬性“ ctrl.start ”和“ ctrl.stop ”是來啟動和停服務。每項服務必須在/init.rc中定義.系統(tǒng)啟動時,與init守護進程將解析init.rc和啟動屬性服務。旦收到設置“ ctrl.start ”屬性的請求,屬性服務將使該屬性值作為服務名找到該服務,啟動該服務。這項服務的啟動結(jié)果將會放“ init.svc.“屬性中。客戶端應程序可以輪詢那個屬性值,以確定結(jié)果。framework訪問系統(tǒng)服務流程framework通過SystemProperties接操作系統(tǒng)屬性,SystemProperties通過JNI調(diào)訪問系統(tǒng)屬性。
4、frameworksbasecorejavaandroidos SystemProperties.java: Jni代碼位置:frameworksbasecorejniandroid_os_SystemProperties.cpp獲取系統(tǒng)屬性 阻塞式:=操作在bioniclibcbionicsystem_properties.c中: =,進程啟動后數(shù)據(jù)已經(jīng)將系統(tǒng)屬性數(shù)據(jù)讀取到相應的共享內(nèi)存中,保存在全局變量_system_property_area_;進程之間都是獨的,系統(tǒng)屬性數(shù)據(jù)是如何讀取到當前進程空間中的呢?后續(xù)介紹。設置屬性異步socket通信: = = s= )通過socket向pro
5、perty_service發(fā)送消息,property_service運在哪呢?三Property Service創(chuàng)建服務端socketinit進程啟動監(jiān)聽過程中:systemcoreinitInit.csocket; =:)socket= ,listen(fd,Property Service 是運在init守護進程中。接收到消息之后什么,還是要先弄清楚整個Property Service是如何實現(xiàn)的呢,后續(xù)介紹。先看看Property Service接收到消息后的處理。四Property Service 監(jiān)聽socket處理Property Service監(jiān)聽socket消息的處理過程:s=
6、 ) )(+, ;通過設置系統(tǒng)屬性啟動/關閉Service:權(quán)限判斷: unsignedunsigned;=; );所以如果想要應有權(quán)限啟動/關閉某Native Service:需要具有system/root權(quán)限找到對應應uid gid,將應名稱加到control_perms列表中處理消息 可以通過設置系統(tǒng)屬性 改變服務的執(zhí)狀態(tài) start/stop: (!strcmp(msg,(!strcmp(msg,(!strcmp(msg, =(連著前就是ctr.start和ctr.stop系統(tǒng)屬性:來啟動和停服務的。例如:/ start boot animationproperty_set(ctl.s
7、tart, bootanim);在init.rc中表明服務是否在開機時啟動: 啟動服務的時候會判斷: & 修改系統(tǒng)屬性值: unsignedunsigned=; =);看這個修改系統(tǒng)屬性權(quán)限表:=, 0 0 0 0 0 0,sys., 0, 0,0指定了特定的戶有修改 帶有某些前綴的系統(tǒng)屬性值。到這基本就是Property對外的基本作流程,Property Service內(nèi)部具體如何實現(xiàn),操作運,跨進程空想內(nèi)存等問題仍未清除是如何處理的。五屬性系統(tǒng)設計屬性系統(tǒng)的上層架構(gòu)如下圖所:Property 運在init進程中,開機從屬性件中加載到共享內(nèi)存中;設置系統(tǒng)屬性通過socket與Property
8、 Service通信。Property Consumer進程將存儲系統(tǒng)屬性值的共享內(nèi)存,加載到當前進程虛擬空間中,實現(xiàn)對系統(tǒng)屬性值的讀取。Property Setter進程修改系統(tǒng)屬性,通過socket向Property Service發(fā)送消息,更改系統(tǒng)屬性值。六屬性系統(tǒng)實現(xiàn)屬性系統(tǒng)設計的關鍵就是:跨進程共享內(nèi)存的實現(xiàn)。下將看看屬性系統(tǒng)實現(xiàn)具體過程:Init進程執(zhí):初始化Property Service:systemcoreinitproperty_service.c初始化共享內(nèi)存空間:)= += =_system_property_area_:每個進程都會使此變量,指向系統(tǒng)屬性共享內(nèi)存區(qū)域,
9、訪問系統(tǒng)屬性,很重要。位于:bioniclibcbionicsystem_properties.c中,屬于bionic庫。后將介紹各進程如何加載共享內(nèi)存。將件作為共享內(nèi)存映射到進程空間內(nèi)存使: a=,|= | =,=加載系統(tǒng)屬性默認數(shù)據(jù)件: ( =加上上所述:Property Service Socket資源的創(chuàng)建,來監(jiān)聽socket通信連接設置系統(tǒng)屬性,在Init進程中Property Service完成了初始化。將得到該內(nèi)存區(qū)域數(shù)據(jù)結(jié)構(gòu):七進程共享系統(tǒng)屬性內(nèi)存空間實現(xiàn)Property Service運于init進程中,將件映射為創(chuàng)建塊共享內(nèi)存空間,但在整個系統(tǒng)中,其他進程也能夠讀取這塊內(nèi)存
10、映射到當前進程空間中,是如何實現(xiàn)的呢?Service進程啟動:將共享內(nèi)存空間fd size作為環(huán)境變量傳遞給新創(chuàng)建進程 =)sprintf(tmp,(notify_service_state(svc-name,=共享內(nèi)存空間fd size作為環(huán)境變量傳遞給新創(chuàng)建進程后,將在何處使呢?將系統(tǒng)屬性內(nèi)存空間映射到當前進程虛擬空間:進程在啟動時,會加載動態(tài)庫bionic libc庫:bioniclibcbioniclibc_init_dynamic.c中:void _attribute_(constructor) _libc_preinit(void);根據(jù)GCC的constructor/destructor屬性:給個函數(shù)賦予constructor或destructor,其中constructor在main開始運之前被調(diào),destructor在main函數(shù)結(jié)束后被調(diào)。如果有多個constructor或destructor,可以給每個constructor或destructor賦予優(yōu)先級,對于con
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 醫(yī)院招聘護士合同范例
- 公共器材租賃合同范本
- 合同范本 合作
- 公司勞動用工合同范本簡版
- 售后回租合同范本
- 出租野餐工具合同范本
- 合同范本些可以修改
- 化妝造型合同范本
- 華能電廠合同范本
- 員工內(nèi)部合同范本
- 建筑地基處理技術規(guī)范JGJ79-2012
- 印象主義、后印象主義課件
- 《中華傳統(tǒng)文化》第1課-炎黃始-華夏悠遠教學課件
- 日常監(jiān)督檢查表
- 隊列訓練教程ppt課件(PPT 86頁)
- 第三章-農(nóng)村公共管理組織課件
- 注塑員工培訓
- 《麻精藥品培訓》ppt課件
- JMP操作簡要培訓
- 勝利油田壓驅(qū)技術工藝研究進展及下步工作方向
- 研究生復試匯報ppt
評論
0/150
提交評論