1,XML(Extensible Markup Language,可扩展标记语言)
1)概念
W3c组织发布的(该公司也发布了html、CSS、xhtml、html5)。
允许用户自定义标签,描述数据关系。
在XML文件中设计UI可以更好地将应用的外观与控制应用行为的代码隔离,每次修改或调整界面布局只需要修改XML文件的代码而不是修改源码和重新编译。
2)场景
A.保存有关系的数据
B.用作软件配置文件,描述程序模块之间的关系。
比如要求软件启动时,启动什么。
3)组成部分
①文档说明
必有。
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
当前文档为xml文档,遵循1.0xml版本,编码方式为UTF-8(GB2312),standalone表示文档是否独立
②元素(element)
命名规范:
区分大小写;
不能以数字或下划线、xml开头;
不能包含空格;
中间不能包含冒号。
③属性
用单引号或双引号引起来。
标签属性所代表的信息也可以用子标签来描述。
如<input name="text">
可以描述为<input><name>text</name></input>
④注释
<!-- -->
⑤CDATA区、特殊字符
在编写 xml文件时,有些内容不想让解析引擎解析执行,而是当作原始内容处理。则把它放在CDATA区。
CDATA区中的内容会原封不动的输出。
<![CDATA[内容]]>
⑥处理指令(PI,processing instruction)
用来指挥解析引擎如何解析XML文档内容。必须以<?
开头,?>
结尾。
如指令xml-stylesheet。
<?xml-stylesheet type="text/css" href="1.css"?>
4)xml文件命名规范
(az)(09)(_)
5)XML约束技术
①XML DTD(文档类型定义Document Type Definitionn)
DTD文件应使用UTF-8或Unicode。在做框架的时候才需要写DTD。
对于本地dtd文档:如文件book.dtd声明xml文档格式,则遵循此dtd文件的xml在写的时候要写:
<!DOCTYPE 书架 SYSTEM "book.dtd">
意思为:所有元素书架,都要遵循dtd文件来写。
或者在xml内部写dtd:
<?xml version="1.0">
<!DOCTYPE 书架[
<!ELEMENT 书架(书+)>
<!ELEMENT 书(书名,作者)>
<!ELEMENT 书名(#PCDATA)>
<!ELEMENT 作者(#PCDATA)>
]>
<书架>
<书>
<书名>书名</书名>
<作者>作者</作者>
</书>
…
</书架>
对于公共的网上dtd文档:
<!DOCTYPE 文档根结点 PUBLIC "DTD名称" "DTD文件的URL">
②XML Schema
6)style和theme(☆☆☆☆☆)
①相同
style和theme本质上相同,xml格式一致。
Theme窗体级别,style窗体元素级别:用在activity上叫做theme,用在view叫做style。
<resources>
<style name="myStyle">
<item name="android:layout_width">fill_parent</item>
</style>
</resources>
②区别
style可以作用在activity上,但是theme却不能反过来作用在view上。
style控制的某些属性是只有针对Activity才能生效的(比如状态栏等);Activity内部有一个继承自View的Decorview。
③theme的继承
Theme这个类为final,故不能被继承。
在XML种,使用parent可以指明Theme,这不算是类的继承。在XML中解析时,遇到parent之后去parent里解析,然后如此递归,知道解析完各级的父XML之后,再回到子XML解析。是类的继承关系的模拟。
④将一个Activity设置成窗口的样式:只需设置Theme
AndroidManifest.xml 中加上:
(1)android:theme=@android:style/Theme.Dialog
(2)android:theme=@android:style/Theme.Translucent就变成半透明的
2,xml解析
1)SAX(Simple SPI for XML,推模型)
推模型:就是我们常说的SAX,它是一种靠事件驱动的模型。当它每发现一个节点就引发一个事件,而我们需要编写这些事件的处理程序。这样的做法很麻烦,且不灵活。
①概念
SAX是一种基于事件的解析器,事件驱动的流式解析方式:从文件开始顺序解析到文档的结束,不可暂停或倒退(SAX是单向的)。
它的核心是事件处理模式,主要围绕事件源以及事件处理器来工作。当事件源产生事件后,调用事件处理器相应的方法,一个事件就可以得到处理。在事件源调用事件处理器特定方法的时候,还要传递给事件处理器相应事件的状态信息,这样事件处理器才能根据提供的事件信息来觉得自己的行为。
②SAX工作原理
对文档进行顺序扫描,当扫描到文档开始与结束、元素开始与结束 等地方时通知事件处理函数,由事件处理函数做相应动作,然后继续同样的扫描,直至文档结束。
③优缺点
优点:
解析速度快,占用内存少。(不用事先调入整个文档)。
缺点:
对于嵌套多个分支来说处理不方便。
④场景
手机、对性能敏感的数据库使用。
2)DOM(文档对象模型,Document Object Model)
①工作原理
解析文件为独立的元素、属性和注释,然后以节点树的形式在内存中对XML文件进行表示,通过节点树访问文档的内容,并根据需要修改文档。
XML对象组成一个树形结构:
对于整个XML文档来说,是一个Document对象。
每一个标签为一个Element对象。
文本变成一个Text对象。
属性变成Attr对象。
分析文件结构时,通常要加载整个文档并构造树形结构,然后才可以检索和更新节点信息。
②优缺点
优点:
检索和更新效率高。(以树形结构存放)
允许编辑和更新XML文档,可以随机访问文档中的数据,可以使用XPath(XML Path Language,是一种从XML文档中搜索节点的查询语言)查询。
缺点:很耗资源。(需要一次性加载整个文档到内存中,对于大型文档,会造成性能问题。)
③场景
PC开发使用较多。
如果数据量不是很大,推荐使用,在查找方面可以和XPath结合。
可以调整JVM大小(默认为64M)来预防内存不足。(编译器里修改VM arguments)
④Dom和Sax解析方法区别
Dom解析的优点是对文档crud(增加Create、读取查询Retrieve、更新Update、删除Delete)方便,缺点是占用内存比较大。
Sax解析的优点是占用内存少,解析速度快,缺点是只适合做文档的读取,不适合做文档的crud。
3)JDOM(Java-based Document Object Model)
4)DOM4J(Document Object Model for Java)
5)JTAX(Streaming API for XML,流式拉分析API)
是一种拉分析式的XML解析技术。它也支持对XML文件的生成操作。StAX是一种面向流的新方法,在java6.0提出。
拉模型: 在遍历文档时,会把感兴趣的部分从读取器中拉出,不需要引发事件,允许我们选择性地处理节点。这大大提高了灵活性,以及整体效率。
StAX与SAX一样是基于XML事件的解析方式,它们都不会一次性加载整个XML文件。但是它们之间也有很大的不同。
PULL
在J2ME对于节点处理比较好,类似SAX方式,都是基于事件的模式。同样很节省内存,在J2ME中经常使用KXML库来解析。
3,AndroidManifest.xml
1)configChanges
在对应Activity设置。
如果不设置对应Activity的android:configChanges,切屏会重新调用各个生命周期,切横竖屏各执行一次。
阻止程序在运行时重新加载Activity,除了设置"orientation",你还必须设置"ScreenSize"。
fontScale:全局字体大小缩放发生改变。
android:configChanges="orientation|screenSize|fontScale|locale|touchscreen|navigation|screenLayout|smallestScreenSize|screenSize|mnc" >
切屏不会重新调用各个生命周期,只会执行onConfigurationChanged方法。
android:configChanges="orientation|keyboardHidden"