Android培训班(20)

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

从上面的函数里可以看到一个创建共享内存的函数,它是怎么样实现创建共享内存的呢?现在来分析它的代码

你可能感兴趣的:(android,F#)