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

在android系統裡,設計有一種系統叫做屬性系統,它是用來做什麼呢?這樣設計有什麼優勢呢?其實這個屬性系統主要是用來保存系統配置,或者用來交換不同進程的信息。這樣的系統最大的優勢是統一瞭系統配置的方式,統一瞭信息交換方式,通過共享內存的方式提高系統的性能。


下面就來分析屬性系統的初始化函數,代碼如下:


#001  void property_init(void)


#002  {


#003      init_property_area();


這行代碼是調用函數init_property_area來設置屬性內存的區域。


 


#004      load_properties_from_file(PROP_PATH_RAMDISK_DEFAULT);


這行代碼是從ramdisk盤裡加載屬性文件。


 


#005  }


 


在這個函數裡,需要查看一下宏定義,如下:


#define PROP_PATH_RAMDISK_DEFAULT “/default.prop”


也就是從內存盤裡加載屬性文件/default.prop,並把這些屬性放到屬性系統裡。


 


 


接著來分析函數init_property_area是怎麼創建共享內存,並把屬性放到裡面給所有進程共享使用的,代碼如下:


#001  static int init_property_area(void)


#002  {


#003      prop_area *pa;


#004 


#005      if(pa_info_array)


#006          return -1;


這段代碼是判斷當屬性信息數組已經初始化,就直接返回。


 


#007 


#008      if(init_workspace(&pa_workspace, PA_SIZE))


#009          return -1;


這段代碼是調用函數init_workspace創建共享內存。


 


#010 


#011      fcntl(pa_workspace.fd, F_SETFD, FD_CLOEXEC);


這行代碼是設置共享內存的執行結束後關閉。


 


#012 


#013      pa_info_array = (void*) (((char*) pa_workspace.data) + PA_INFO_START);


這行代碼是保存創建共享內存指針。


 


#014 


#015      pa = pa_workspace.data;


#016      memset(pa, 0, PA_SIZE);


這段代碼是清空屬性共享的內存。


 


#017      pa->magic = PROP_AREA_MAGIC;


#018      pa->version = PROP_AREA_VERSION;


這段代碼是設置屬性共享內存的版本號。


 


#019 


#020          /* plug into the lib property services */


#021      __system_property_area__ = pa;


這行代碼是設置屬性共享內存可以給庫的屬性共享服務使用。


 


#022 


#023      return 0;


#024  }


#025 


 


從上面的函數裡可以看到一個創建共享內存的函數,它是怎麼樣實現創建共享內存的呢?現在來分析它的代碼

發佈留言