Android开发学习笔记(1)
设计与开发
模式
- “all-in-one”
单一app,内部进行分层设计和横向模块划分。例如微信 - 组合app
例如:Facebook+Messenger - 单一app形式,但内部模块独立开发编译发布
例如:手机淘宝客户端,手机管家
插件化开发下的开发质量管理
- 自动代码生成
- 应用:网络协议、存储对象模型
- 缺点:代码生成量大
- 动态注解机制
- 应用:界面控件、存储对象模型
- 缺点:会使用反射相关的内容,导致性能缺失
- 持续集成系统
- Jenkins+Plugins
- 静态代码扫描
- CheckStyle
- Findbugs
- Android Lint
- 单元测试
- 逻辑层为主
- 稳定性监控
- Crash、ANR监控
资源管理
设计模式MVC
- 全称:Model-View-Controller
- 数据存储、逻辑控制、试图展现分离
资源定义
- 从代码中分离
- 用于UI呈现
- 静态内容
资源的组织形式
- assets/:原始资源,任意格式与任意组织方式
- res/:系统化资源,系统统一组织和管理
- res/下九种类型资源文件
目录 | 资源类型 |
---|---|
anim/ | 属性动画;补间动画 |
color/ | 颜色状态selector |
drawable/ | Bitmap或XML Drawable files |
layout/ | UI布局 |
menu/ | 应用菜单 |
values/ | 常量(字符串、数组等)定义 |
xml/ | XML属性配置 |
raw/ | 原始格式文件(音、视频) |
资源适配
资源编译
- 索引方式提高读取速度
- 编译成二进制提高解析速度
- 减少资源大小
- 编译后
- assets不动
- res下values消失
- 除raw外xml编译成二进制文件
- 新增resources.arsc
资源访问
UI
UI渲染
- UI渲染是单线程的
- 消息循环机制(UI事件、定时器、网络通信触发消息)
- UI消息 -> ViewRoot -> DecorView -> 启动渲染
- Measure, Layout, Draw 皆递归计算父、子view
- skia图形库
UI性能优化
- 减少主线程内容
- 避免过度绘制
- Overdraw 过度重绘检查
- 减少layout层级
- layout是递归执行的(见上)
- 减少耗时操作
- 减少I/O
- 一定不要做网络操作(注意实在主线程下)
- 不要同时做过多UI布局计算
- 避免过度绘制