在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培训班(20)相关推荐

  1. Android培训班(62)dex文件格式3

    SHA-1签名字段    从dex文件头里,已经看到前面有一个4字节的字段检验码了,那为什么又需要一个SHA-1签名字段呢? 这不是重复了吗?起初始看来,好像是有点重复,可是仔细考虑一下,这样设计,还 ...

  2. Android培训班(42)

    <!-- @page { margin: 2cm } P { margin-bottom: 0.21cm } --> Android.mk文件是用来向编译系统描述项目组织和编译方式,实际上 ...

  3. Android培训班(9)

    android系统的初始化过程是从那里开始呢?它在加载linux基本内核后,就开始运行一个初始化进程,叫做init进程,那么怎么样知道它是加载init进程的呢?难道上天就注定的吗?呵呵,不是的,原来是 ...

  4. Android培训班 4

    要想Android运行起来,不但要编译内核正确,还需要有正确地安装根文件系统,才可以运行起来.第一步,就是从模拟器里提取data目录的数据.也许你会问,为什么要从模拟器里提取呢?因为这样做是最方便的, ...

  5. android 电池20 提醒,当日修冷知识:滴咚!为啥手机电量低于20%就会自动提醒?...

    原标题:当日修冷知识:滴咚!为啥手机电量低于20%就会自动提醒? ​ "滴,手机电量不足20%,请及时充电." 每当手机突然跳出这一行字的时候 都彷佛晴天霹雳,噩梦来袭. ​ &q ...

  6. miui 7.7.20 android,MIUI12 20.7.23更新,第二批稳定版公测陆续推送!

    MIUI12 20.7.23更新,第二批稳定版公测陆续推送! 2020-07-23 22:17:18 0点赞 0收藏 0评论 创作立场声明:本文由我原创,转载请标注来源. 迎接我们的是这周的最后一个版 ...

  7. Android培训班(45)

    <!-- @page { margin: 2cm } P { margin-bottom: 0.21cm } A:link { so-language: zxx } --> 帧布局(Fra ...

  8. Android培训班(44)

    <!-- @page { margin: 2cm } P { margin-bottom: 0.21cm } --> layout-land和layout-port目录主要用来保存应用程序 ...

  9. Android培训班(1)

    Android是基于Linux内核的软件平台和操作系统,是Google在2007年11月5日公布的手机操作系统平台,早期由Google开发,后期由开放手机联盟(Open Handset Allianc ...

最新文章

  1. win7下安装配置tomcat,java运行环境
  2. c++98不支持set初始化列表
  3. matlab 高斯一阶导,将Matlab高斯导数转换为Opencv
  4. 【转】详谈for循环里面的break和continue语句
  5. 关于自动布局更新约束方法的总结
  6. Enterprise Vault 2007 Series [PST Migration]
  7. python使用ssh 中文_使用Python进行SSH的最简单方法是什么?
  8. 你知道Arrays.asList 有坑吗?千万别踩啊!
  9. 前端面试instanceof_【面试准备】每日前端面试题 45 (前端校招字节跳动面试4)...
  10. C++游戏编程教程(一)
  11. [3DMax]物体在场景内居中和物体内坐标居中
  12. html微信分享图标设置,微信分享之设置分享title和icon
  13. 智能家居无线方案ZIGBEE、Z-Wave、WIFI、蓝牙、红外、GPRS以及NB-IOT对比
  14. tushare实战分析美元黄金与美债收益率、利率的关系
  15. 计算机在职研是不是双证,计算机双证在职研究生好考吗?
  16. 任志强:松房贷等政策出台后 房价将U型缓慢回升
  17. ThinkPHP5整合原生Swoole实现NBA比赛图文直播以及聊天室功能
  18. 我国2016研发的超级计算机,我国超级计算机研制取得重大突破
  19. 【Poco学习笔记】Poco库win10下编译(超详细,小白都能看得懂)
  20. window下使用vnc远程登录linux图形界面和运行应用程序 和odroid Xu4开发板的使用和视频接口VGA、DVI、HDMI的联系

热门文章

  1. superset连接数据库,以及汉化
  2. Smarty教程[3]
  3. 学儿歌听故事android源码,宝宝学儿歌听故事
  4. 掌财社:炒期货爆仓的解决办法
  5. 关于SGD优化器的学习率衰减的问题
  6. 一个老程序员分析程序员为什么会跳槽
  7. C++中替代sprintf的std::ostringstream输出流详解
  8. Linux cp复制文件或文件夹
  9. C# PostgreSQL 教程
  10. linux dhcp配置实验报告,Linux DHCP服务器配置实验报告.doc