Android最佳实践

33
android 应应应应应应应应 应应应 应应应应 () 2012.4.7

Transcript of Android最佳实践

Page 1: Android最佳实践

android 应用开发最佳实践

董炼师(黎三平)

2012.4.7

Page 2: Android最佳实践

• 总行数: 101722• 代码行数: 73656• 注释行数 ( 包括单行注释 ) : 14915• 空行数: 13151

Page 3: Android最佳实践

Agenda

代码实践设计实践android 实践更多…

Page 4: Android最佳实践

包的划分极端,过粗过细客户端由过粗(一个包)到现在的过细类二叉树,适合人脑处理

Page 5: Android最佳实践

命名变量名,成员变量和局部变量类名方法名不要过长也不要过短

Page 6: Android最佳实践

代码规模一个类不要超过 1000 行一个方法不要超过 47 行

Page 7: Android最佳实践

注释不用的代码删除,而不是注释,有 svn 呢,否则混淆试听并且增加人脑负担注释用来描述干什么的(最好这都不要,用你的代码说明一切 - 命名),为什么这么干

Page 8: Android最佳实践

Agenda

代码实践设计实践android 实践更多…

Page 9: Android最佳实践

原则以功能为导向,而非过程低耦合,高内聚

Page 10: Android最佳实践

解耦数据和 UI 分离更重要是解开数据与 activity 上下文的耦合,因为同一数据可能跨多个 activity数据再可以根据业务分成不同模块,顶多门面模式一下

Page 11: Android最佳实践

数据管理同样的数据只保存一个副本,否则难以维护且浪费内存配置数据和业务数据分开全局数据和局部数据? Activity context/Application context?

Page 12: Android最佳实践

纯数据对象纯数据对象跟 map 比有啥好处? json 串呢?直观,静态检查尽量不用纯数据对象封装数据和操作

Page 13: Android最佳实践

静态变量不那么 OO不利于垃圾回收,它的生命周期与类加载器一致,需要显式释放静态变量对象引用到上下文,容易引起内存泄露尽量杜绝使用静态变量,除非 final 它

Page 14: Android最佳实践
Page 15: Android最佳实践

单例跟静态变量一样,难以回收如果需要上下文 , 与上下文生命周期不一致是不稳定的因素尽量少用,除非是全局只读数据

Page 16: Android最佳实践

静态方法不那么 OO最好只在工具类中使用

Page 17: Android最佳实践

多线程线程运行不靠谱,依赖于虚拟机的线程调度需要处理同步,复杂度高少用多线程,宁愿多进程(比如 service )

Page 18: Android最佳实践

异常处理try 块不要过大,特别是不要嵌套尽量不要用异常来做流程控制不处理的异常尽量向上抛,而不是被猫吃掉异常捕获不是万能的,不要出现问题全套进来

Page 19: Android最佳实践
Page 20: Android最佳实践

访问控制建议显式的声明访问控制尽量使用存取方法,而不是点操作

Page 21: Android最佳实践

同步 vs 异步别等我,我会告诉你回调比返回值优美(比如网络)耗时操作必须异步

Page 22: Android最佳实践

Agenda

代码实践设计实践android 实践更多…

Page 23: Android最佳实践

view or activity?

以功能导向,同一功能的可以放在一个activity ,不同的分开没必要自己维护 view 树结构,考虑setContentView()

Page 24: Android最佳实践

图片图片是内存使用大户,主动回收可以考虑使用软引用可以保存图片数据 (byte[]), 而不是bitmap 对象尽量不要去处理图片(合成,拷贝等)

Page 25: Android最佳实践

回收再利用的对象数组类( list 类)的视图尽量使用AdapterViewAdapter 的使用,注意使用convertView可以考虑 viewHolder

Page 26: Android最佳实践

活用资源尽量使用资源解决问题,而不是代码资源包括:layout,drawable,values,anim等可以考虑自定义的资源,来描述一些数据

Page 27: Android最佳实践

对象生命周期

能局部(没有上下文生命周期那么长)的不全局保存保证 activity 中的对象与 activity 本身的生命周期一样长过长的生命周期的对象可以考虑引用application context在生命周期回调函数适当的地方释放内存,特别是静态变量

Page 28: Android最佳实践

流和游标记得关闭流,文件句柄等游标关闭,使用方需要关闭

Page 29: Android最佳实践

Agenda

代码实践设计实践android 实践更多…

Page 30: Android最佳实践

操作性不追求完美, 100%目标 ,80%随手改进,小步快跑

Page 31: Android最佳实践

继续…

好的设计、架构是自己长出来的(迭代)根据实际需求,而不是想象的需求,别过度设计没有完美,适合的就是最好的

Page 32: Android最佳实践

Q&A

Page 33: Android最佳实践

Thanks!