1. 程式人生 > >有關android的property機制 (property_set() & property_get())

有關android的property機制 (property_set() & property_get())

有關android的property機制


今天跟璋兒討論到系統配置的問題。最常見的做法是由一個程序來維護這些配置,進行讀寫。其它的程序如果需要set/get某一配置項,需要通過socket傳送訊息到管理程序。


我想到了android的property機制。其實property就是name&value對,與常見系統中的配置項沒有差異。在android系統中,大量使用了property_set和property_get,用來設定和獲取某一property。下面來分析一下。


property_set/property_get位於libcutils.so庫。任何程序若要呼叫這兩個函式,需要連結libcutils.so。


libcutils.so呼叫到了__system_property_set和__system_property_get函式,這兩個函式位於bionic庫中,原始碼檔案為bionic/libc/bionic/system_properties.c,生成的庫檔案為libc_common.so。


對於set和get,分別會建立socket,傳送訊息到服務端。服務端位於init程序中,有一個property_service程序專門負責這個。該service讀取socket訊息,進行set和get的處理。property_service程式碼位於system/core/init/property_service.c


在system_properties.c和property_service.c中都用到了共享記憶體(用mmap實現),這裡我開始有些搞不懂:如果用socket機制的話,只需要管理程序來維護記憶體即可,客戶端不許要訪問該記憶體,幹嘛要用共享記憶體呢?


原來,android這樣做是為了效率考慮。在system_properties.c的get呼叫中,可以通過只讀方式訪問共享記憶體,直接獲取配置。當然了,為了保證get的時候別人不在set,避免讀寫衝突,get時需要等待一個訊號量。對於set,system_properties.c會通過socket傳送訊息到service端處理,service端增加或者更新property後會wake該訊號量。service端以讀寫方式開啟共享記憶體。


為什麼要這樣設計呢?因為系統中由大量的get呼叫,get可以直接訪問共享記憶體,所以訪問更快。對於set,需要交給服務端處理,這樣開銷比較大,因為用到了socket,但因為set呼叫相對較少,所以問題也不嚴重。另為,android系統由以ctl打頭的property,這種property比較特殊,可以控制服務的執行和停止,將這些控制放在service(即init程序)也就理所當然了!


附上一個框圖:
有關android的property機制 - leave - leave




 

相關推薦

有關android的property機制 (property_set() & property_get())

有關android的property機制 今天跟璋兒討論到系統配置的問題。最常見的做法是由一個程序來維護這些配置,進行讀寫。其它的程序如果需要set/get某一配置項,需要通過socket傳送訊息到管理程序。 我想到了android的property機制。其實propert

訊息佇列的有關補償機制

淺談基於訊息佇列的補償機制 採用基於訊息佇列的非同步事件驅動模型來解決問題的時候,一個計較棘手的問題就是事務的一致性。 案例:現在使用者發起一個建立訂單的請求,如果我們是單系統架構,那麼修改訂單表,修改庫存表可能都是在同一個事務中完成,所以輕而易舉就達到了事物一致性原則,但是這不是我

有關Handler機制原理的總結

Handler是執行緒與執行緒間進行通訊的一套機制。        Handler是常被開發者拿來更新UI的一種訊息處理機制,它的執行機制需要底層的Looper和MessageQueue的支撐。        一個Android應用程式被建立時就會建立一個程序,該程序用應

關於UI執行緒與非UI執行緒互動,有關Handler機制等(一)

在Android中,一個activity有一個主執行緒也叫UI執行緒,作用就是用來繪製UI介面,在這個執行緒裡面,你的應用和android的UI元件發生互動。所以當你需要進行某些費時操作的時候,比如訪問網路等,如果放入UI執行緒,就會阻塞介面的繪製,當介面不能繪製的時候,整

Windows程式和訊息機制(二):訊息有關的函式

不同視窗程式可以通過訊息進行互動,主要用到的函式如下: FindWindow 獲取一個視窗的控制代碼。 HWND FindWindow( LPCTSTR lpClassName,// 類名 LPCTSTR lpWindowName//

有關PHP異常和錯誤處理機制的思考(二)

通過上篇文章呢,咱們對於PHP異常的定義、捕獲、處理等方面有了簡單的一個概念,這次呢,咱們就來看下關於異常的同胞兄弟,錯誤,以及錯誤的一個處理機制。 我們要知道,PHP中,錯誤處理,比異常處理,更加重要和凸顯價值,咱們之前的文章呢,已經把錯誤的概念介紹過了,現在,咱們就相比較於異常,來給錯誤

有關PHP異常和錯誤處理機制的思考(一)

我們從一門語言的層面上來看的話,這個語言通常具有很多的錯誤處理的一個模式,但是這些個錯誤處理模式,往往就是建立在約定俗成的基礎上,也可以說,這些錯誤都是可以預知的。 但是在大型的一個專案或者說系統裡,如果我們每次呼叫一個功能模組的時候,都去逐一檢測我們這個模組中肯能存在的錯誤,很明顯的就會看

有關java參數的兩種傳遞機制

產生 情況 不同的 成員 提升自己 比較 輸出 性能 doc 值傳遞:方法調用時,實際參數把它的值傳遞給對應的形式參數,方法執行中形式參數值的改變不影響實際參 數的值。 引用傳遞:也稱為傳地址。方法調用時,實際參數的引用(地址,而不是參數的值)

(面試題)有關JVM垃圾回收機制的那些演算法

三種垃圾回收演算法 標記-清除(年老代) 標記-整理(即標記-壓縮)(年老代) 複製(年輕代) 1、標記-清除演算法   原理: 從根集合節點進行掃描,標記出所有的存活物件,最後掃描整個記憶體空間並清除沒有標記的物件(即死亡物件)

android property屬性property_set()&& property_get() selinux許可權問題

首先得知道,android property屬性,在selinux許可權下我們不管是property_set還是property_get,相關服務都是需要許可權去操作的,特別是property_set, 這裡就我遇到的問題為例說明下(Android 8.0): 1.開始我就設定好需要的屬性名

微信網頁授權獲取用戶信息等機制

json 開發者 userinfo 技術分享 nal amp 分隔 response unionid 參考官方文檔 https://mp.weixin.qq.com/wiki/17/c0f37d5704f0b64713d5d2c37b468d75.html 1.用戶進入授權

字符設備之poll機制

range his ssi movl -o 是把 sys ack timespec poll機制作用:相當於一個定時器。時間到了還沒有資源就喚醒進程。 主要用途就是:進程設置一段時間用來等待資源,假設時間到了資源還沒有到來,進程就立馬從睡眠狀態喚醒不再等待。當

繞過chrome的彈窗攔截機制

eww ajax請求 出發 btn 發的 沒有 ces 攔截 click 在chrome的安全機制裏面,非用戶觸發的window.open方法,是會被攔截的。舉個例子: var btn = $(‘#btn‘); btn.click(function () { //

與正則有關的JS方法結合其在項目中的應用

調用 文本 但是 ext hone 使用 表達式 所有 reg         與正則有關的JS方法結合其在項目中的應用   前言     最近項目中用到正則匹配比較多,因此打算深入理解和總結下各個與正則有關的方法,再結合在項目中使用的情況。與正則有關的JS方法共有7個,

Android安全機制介紹

backup 可能 mbed 集合 應用程序 linux用戶 內存空間 bin 實施 Android的安全機制包含下面幾個方面: ? 進程沙箱隔離機制。 ? 應用程序簽名機制。 ? 權限聲明機制。 ? 訪問控制機

Android有關surfaceView又一次創建的問題。

視頻播放器 android pan layer 狀態 style 又一 一次 space 近期在做一個Android視頻播放器的項目。遇到一個問題,就是鎖屏之後。surfaceview就會被銷毀掉,然後就會出現各種錯誤。到csdn論壇去發帖提問,各種所謂的大神都說,解鎖

C++差分隱私的指數機制的一種實現方法

list and span 機制 namespace stdio.h int class ++ #include <iostream> #include<stdio.h> #include<stdlib.h> #include<m

Java多線程機制

tro wid 機制 bsp 多核 idt http log 任務 Java 中的多線程簡介 1. 並發與並行的區別:   二者之間的區別在於,並發指的是一個處理器同時處理多個任務,並行指的是多個處理器或者是多核的處理器同時處理多個不同的任務. 2. 並發是邏輯上的同時發生

一個極其高效的虛擬機內存冗余消除機制:UKSM

穩定版 評測 內核 基礎 程序 cpu占用 projects kvm虛擬機 pos Linux內核機制KSM(Kernel Samepage Merging)能合並KVM虛擬機之間相同內存的頁面,被CentOS, RHEL之類的服務器內核廣泛采用,但是其速度很慢。UKSM(

反射機制的理解

java反射機制的理解以前學過很長時間反射機制,很是不理解?今天終於看到一本書講的很詳細。所有反射機制都是通過一個類叫做Class來實現:讓我看看書上是怎麽介紹的ClassClass是java.lang包中的類,該類的實例用來封裝對象運行時的狀態。當一個類被加載且創建對象時,和該類相關的一個類型為Claas的