安卓屬性獲取

2021-07-08 10:25:48 字數 1387 閱讀 8121

安卓系統在啟動的時候會配置各種全域性屬性,屬性由init程序啟動守護,原始碼位於/system/core/init。

init守護程序將啟動乙個屬性服務,屬性服務在「init」守護程序中執行。每乙個客戶端想要設定屬性時,必須連線屬性服務,再向其傳送資訊。屬性服務將會在共享記憶體區中修改和建立屬性。任何客戶端想獲得屬性資訊,可以從共享記憶體直接讀取。這提高了讀取效能。 客戶端應用程式可以呼叫libcutils中的api函式以get/set屬性資訊。

原始碼位於system/core/libcutils/properties.cint property_set(const char *key, const char *value)

而libcutils又呼叫libc中的 __system_property_*** 函式獲得共享記憶體中的屬性。libc的源**位於:device/system/bionic。

每個屬性都由屬性名和屬性值構成,用於記錄系統設定和程序切換的相關資訊。系統啟動時,系統會分配乙個記憶體區用於共享系統屬性。

其中,init.c 的 notify_service_state()函式守護屬性狀態,呼叫property_set()函式設定屬性。

而libcutils又呼叫libc中的 __system_property_*** 函式獲得共享記憶體中的屬性。libc的源**位於:device/system/bionic。

屬性服務呼叫libc中的__system_property_init函式來初始化屬性系統的共享記憶體。當啟動屬性服務時,將從以下檔案中載入預設屬性:

/default.prop

/system/build.prop

/system/default.prop

/data/local.prop

屬性將會以上述順序載入。後載入的屬性將覆蓋原先的值。這些屬性載入之後,最後載入(後面幾個載入的)的屬性會被保持在/data/property中。

特別屬性 如果屬性名稱以「ro.」開頭,那麼這個屬性被視為唯讀屬性。一旦設定,屬性值不能改變。

如果屬性名稱以「persist.」開頭,當設定這個屬性時,其值也將寫入/data/property。

如果屬性名稱以「net.」開頭,當設定這個屬性時,「net.change」屬性將會自動設定,以加入到最後修改的屬性名。(這是很巧妙的。 netresolve模組的使用這個屬性來追蹤在net.*屬性上的任何變化。)

屬性「 ctrl.start 」和「 ctrl.stop 」是用來啟動和停止服務。

每一項服務必須在/init.rc中定義.系統啟動時,與init守護程序將解析init.rc和啟動屬性服務。一旦收到設定「 ctrl.start 」屬性的請求,屬性服務將使用該屬性值作為服務名找到該服務,啟動該服務。這項服務的啟動結果將會放入「 init.svc.《服務名》「屬性中 。客戶端應用程式可以輪詢那個屬性值,以確定結果



安卓開發RelativeLayout屬性的簡單介紹

相對於給定id控制項 android layout above 將該控制項的底部置於給定id的控制項之上 android layout below 將該控制項的底部置於給定id的控制項之下 android layout toleftof 將該控制項的右邊緣與給定id的控制項左邊緣對齊 android...

安卓屬性及用法

1,概述 屬性動畫分為四種 分別是 alpha scale translate rotate 2,各個屬性動畫詳解 1 alpha 調節透明度 android fromalpha動畫開始的透明度,從0.0 1.0 0.0表示全透明,1.0表示完全不透明 android toalpha 動畫結束時的透...

安卓基本屬性

android id id text view 給當前的控制項定義了唯一標誌符 android layout width 指定控制項的寬度 android layout height 指定的控制項的高度 android中所有的控制項都具有android layout width,android la...