• 为什么Android需要Property属性系统?

    类似Windows注册表
    服务器君一共花费 19.355 ms 进行了 3 次数据库查询,努力地为您提供了这个页面。
    广告很萌的

    在Android App开发的时候,会使用很多的环境变量,有时候会遇到以下几种情况:

    • 该变量在多处需要使用,并且是跨进程或者跨线程的。
    • 该环境变量一般只需读取一次,不需要频繁保存。
    • 这个变量信息在关机重启后任然可以保存。

    对于这些需求,通常的做法是将这些信息保存到一个文件中,通过对该文件的读写来提取和保存信息,这些信息的数据量都比较小。这种方法是可以的,但是不是很系统完善,而且当需要读取信息时都需要进行一次文件的io操作,这就很费时和浪费系统资源。

    还有一种情况,就是一个变量信息,开机启动的时只需从flash中读取一次,在系统运行时很少对它进行修改;如果保存到文件,每次读取都要进行一次IO操作,如果保存不当很容易出错,所以这种信息保存到内存更显得合适。

    Window中有注册表这样完善的模块对少量配置信息进行存储,使用起来安全、方便、快捷,android中是否也有类似的接口呢?答案是肯定的,那就是Prop模块。

    Prop模块存储着系统运行的很多配置信息,当程序运行时需要某种系统状态时,会到该模块中进行读取和寻找。Prop模块本质上来说,是系统运行时内存中保存的一块数据区,读写数据都是对这一块区域进行操作;好处是读写速度快,数据跨进程共享,缺点是突然断电会丢失数据;当然Prop也能保存数据,这个在后面提到。

    Android 系统的配置信息

    Android的启动后,在property_service.c的property_init中完成prop的初始化。系统中存在着几个文件,如build.prop和default.prop等,这些文件在系统构建时候生成的,里面包含很多系统的配置。系统开机时回去加载这些文件中的信息并保存到prop模块(内存)中去,以便其它程序进行读取和使用。

    例如在build.prop中有如下信息:

    // 虚拟机的堆栈大小以及其它属性
    dalvik.vm.heapstartsize=5m
    dalvik.vm.heapgrowthlimit=96m
    dalvik.vm.heapsize=256m
    dalvik.vm.heaptargetutilization=0.75
    dalvik.vm.heapminfree=512k
    dalvik.vm.heapmaxfree=2m
    
    // 时区信息
    persist.sys.timezone=Asia/Shanghai
    
    // 软件版本构建信息
    ro.build.version.codename=REL
    ro.build.version.release=4.2.2
    ro.build.date=Fri Dec 26 15:56:10 UTC 2014
    ro.build.date.utc=1419609370
    
    // CPU信息,默认语言设置
    ro.product.cpu.abi=armeabi-v7a
    ro.product.cpu.abi2=armeabi
    ro.product.manufacturer=unknown
    ro.product.locale.language=en
    ro.product.locale.region=US
    
    // 虚拟机的调试信息保存
    dalvik.vm.stack-trace-file=/data/anr/traces.txt	
    

    以上动作都是在init.rc中完成的,该过程会调用property_service.c中的start_property_service函数,在该函数中完成以下文件的加载:

    #define PROP_PATH_RAMDISK_DEFAULT  "/default.prop"
    #define PROP_PATH_SYSTEM_BUILD     "/system/build.prop"
    #define PROP_PATH_SYSTEM_DEFAULT   "/system/default.prop"
    #define PROP_PATH_LOCAL_OVERRIDE   "/data/local.prop"
    

    同时会调用load_persistent_properties函数,该函数会/data/property/中寻找用户的保存设置。

    Env环境变量中有一个ANDROID_PROPERTY_WORKSPACE变量,该变量中存储着prop内存区域的大小,如果想知道详细,可查阅init_property_area函数。

更多 推荐条目

Welcome to NowaMagic Academy!

现代魔法 推荐于 2013-02-27 10:23   

本章最新发布
随机专题
  1. [软件工程与项目管理] 呈现器的布局与绘制 11 个条目
  2. [智力开发与知识管理] 整体性学习步骤 9 个条目
  3. [PHP程序设计] CodeIgniter与PHP框架设计 5 个条目
  4. [JavaScript程序设计] jQuery与表单操作 2 个条目
  5. [Python程序设计] Tornado表单处理 3 个条目
  6. [智力开发与知识管理] 信息的类型与结构 9 个条目
  7. [软件工程与项目管理] 开始使用Git 3 个条目
  8. [移动开发] Android Studio里的Gradle 3 个条目
  9. [移动开发] Android加载器Loaders 5 个条目
  10. [移动开发] Android与SQLite数据库 7 个条目
  11. [移动开发] 刷机与root相关 2 个条目
  12. [移动开发] Android View注入框架Butter Knife 3 个条目
窗口 -- [协会]