在安卓app开发中,常需要将一些数据放在配置文件,辅助程序开发和运行。依据数据复杂度、使用场景等条件,会存在不同种类的配置文件,比如最常见的xml文件,使用在Androidmanifest.xml,res资源定义等。其实除了xml之外还有其他格式的文件可以用作配置文件,比如json、properties等。下面来详细看一下:
1.Properties文件
常用于保存软件配置信息,类似hashmap保存信息,key和value对应。
例如as工程下:
local.properties
ndk.dir=C\:\\Users\\Administrator\\AppData\\Local\\Android\\Sdk\\ndk-bundle
sdk.dir=C\:\\Users\\Administrator\\AppData\\Local\\Android\\Sdk
gradle.properties:
systemProp.http.proxyHost=mirrors.zzu.edu.cn
org.gradle.jvmargs=-Xmx1536m
systemProp.http.proxyPort=80
2.XML文件
XML has been used to describe structured data and to serialize objects. Various XML-based protocols exist to represent the same kind of data structures as JSON for the same kind of data interchange purposes.
安卓app使用xml配置文件的场景:
<1> SharedPreferences : key-value app运行过程动态生成的,保存一些配置信息
安卓资源文件
<2> res目录:比如string.xml,编译后通过aapt打包生成resource.arsc二进制索引文件。二进制格式的XML文件有如下优点:
占用空间小。这是由于所有XML元素的标签、属性名称、属性值和内容所涉及到的字符串都会被统一收集到一个字符串资源池中去,并且会去重。有了这个字符串资源池,原来使用字符串的地方就会被替换成一个索引到字符串资源池的整数值,从而可以减少文件的大小。
解析速度快。这是由于二进制格式的XML元素里面不再包含有字符串值,因此就避免了进行字符串解析,从而提高速度。
Android资源管理框架的另外一个重要任务就是要根据资源ID来快速找到对应的资源。app代码编译之后,生成一个R.java,这个类记录了每一个资源的id。程序运行过程,可以使用id,到索引文件种快速查找对应的资源。具体实现原理可以参考AOSP源码实现。
案例:
微信apk
配置文件种类 | 占用空间 |
---|---|
res资源文件夹占用空间 | 22.9 MB |
aapt编译打包优化后生成的resource.arsc的占用空间 | 6.18MB |
<3>AndroidManifest.xml用于定义app的组件、权限等配置信息
3.json(JavaScript Object Notation)
JSON is an open-standard file format that uses human-readable text to transmit data objects consisting of attribute–value pairs and array data types (or any other serializable value). It is a very common data format used for asynchronous browser–server communication, including as a replacement for XML in some AJAX-style systems.
优点:易阅读,轻量级,属性-值格式存储
json引擎 | 描述 |
---|---|
gson | Gson是由谷歌公司研发的产品,目前是最全的Json解析工具。完全可以将复杂的类型的Json解析成Bean或者Bean到Json的转换 |
org.json | org.json是Java常用的Json解析工具,主要提供JSONObject和JSONArray类 |
fastjson | Fastjson是一个Java语言编写的高性能的JSON处理器,由阿里巴巴公司开发。FastJson采用独创的算法,将parse的速度提升到极致,超过所有json库。但是在对一些复杂类型的Bean转换Json上会出现一些问题,需要特殊处理。 |
jackson | Jackson是由其社区进行维护,简单易用并且性能也相对高些。但是对于复杂的bean转换Json,转换的格式鄙视标准的Json格式。PS:Jackson为Spring MVC内置Json解析工具 |
json与xml比较
<1>xml功能更为强大,可以通过dtd schema实现较为复杂的数据类型定义。在安卓系统中大量使用了xml作为配置文件,
比如AndroidManifest.xml,资源目录下string.xml等。但是xml的缺点是解析速度相对较慢,占用空间相对较大。因此,安卓对资源文件在编译、打包过程进行了优化,生成了arsc二进制文件,占用空间更小,解析过程避免字符串比较,效率更高。
<2>json相比xml具有易阅读,轻量级(没有结尾标示符等),加载效率高。如果考虑性能和占用空间大小,在json可以满足使用的情况之下,可以优先使用json。但是上面提到了安卓apk资源xml文件编译优化的事项,如果是配置信息可以通过资源文件保存,那么使用资源文件xml要比json配置文件解析效率要高,空间占用也更小。
总结:
在了解了各种配置文件的设计初衷和优势劣势之后,后续在app开发中可以更有针对性的选取适合的方案。上文只是
简单分析了配置文件的使用,此类文件可以延伸到存储方案这个大的话题,会在此基础之上涉及到内存、缓存等知识,
后面可以将此议题展开。