安卓开发学习
UI技术探索及其应用
资源:资源是指从代码中分离,用于UI呈现或者存储其余逻辑数据的静态内容,如字符串,图片,页布局等
2.1
安卓资源
assets:原始资源
res:系统化资源
资源差异化
上面的资源适配优先级从高到低
资源的编译
使用索引方式提升读取速度
编译成二进制提高解析速度
缩减资源大小(如裸文件的压缩)
资源的访问
对于assets资源,直接进行读取,对于Res资源,先使用ID解析出文件名称,再进行读取
对于从R.java中读取资源,存在两种方式,第一种清楚资源常量的值,直接读取,第二种不清楚,通过包名称,类别,值的名字来进行获取
2.2
什么是UI
UI是指用户交互接口
UI包含窗口和控件
UI的结构
界面实际上就是一颗抽象的View树
UI的渲染是单线程的,故存在一个消息循环机制
UI渲染过程
上述的重点在于测量,布局,渲染,由ViewRoot接受UI消息,然后将其转给DecorView,随后其开始绘制
那么在计算结束之后,就会进行渲染
这里分为两种方法
计时器+分时渲染
动画
UI性能评估
在安卓中,每16ms会进行一次渲染,需要在每一帧准备好对应的画面,如果没有准备好,就会丢帧,就会出现不流程的问题
UI优化
不能在主线程做太多事情(避免过度绘制,优化Layout,减少层级,主线程不做耗时操作)
终端网络技术
由于在移动网络中,数据传输的丢包率高,故我们需要在TCP上层做一些处理
WestWood算法 基于带宽设置拥塞窗口
编码方式
文本编码:包含逗号分隔,HTTP格式(采用键值对的形式,可以不按照顺序,但是很难实现统一标准),xml格式(结构更复杂,支持类型检查,但是浪费多)
二进制编码:TLV(tag - length - value),protobuf(谷歌开源的语言,通过自描述来确保兼容性)
关于网络的语义
对于拆包:我们通过有几种方式:1. 使用特殊符号标识结束 , 2. 头部信息中使用长度标识, 3. 回包的方式
兼容性和扩展性:版本号,压缩算法,加密算法
并发处理:序列号,命令号
终端存储技术
存储的数据一般分为三类
文件:用户独立发送和接收的独立文件数据
键值对:key-value收集
数据库:大量同类型重复数据存储
文件
二进制形式直接存储
序列化技术比较
protocolbuf
数据库表SQlite
存储过程
使用一次原子操作向磁盘进行IO
数据库设计优化
SQLite基础知识
1. 文件组织方式:每一个table为一个B+树,每一个index为一个B树
数据库会把数据按 “页面(Page)” 为单位存储(可理解为 “数据块”),每个页面有固定大小(比如常见的 8KB、16KB 等,由数据库配置决定,即 PageSize
)。表中的一行数据,会尽量存放在同一个页面里,以减少查询时的 “跨页读取”(跨页读取需要额外的 IO 操作,拖慢性能)。