SlideShare une entreprise Scribd logo
1  sur  33
android 应用开发最佳实践


     董炼师(黎三平)

       201 2.4.7
•   总行数: 101722
•   代码行数: 73656
•   注释行数 ( 包括单行注释 ) : 14915
•   空行数: 13151
Agenda
•   代码实践
•   设计实践
•   android 实践
•   更多…
包的划分
极端,过粗过细
客户端由过粗(一个包)到现在的过细
类二叉树,适合人脑处理
命名
变量名,成员变量和局部变量
类名
方法名
不要过长也不要过短
代码规模
• 一个类不要超过 1 000 行
• 一个方法不要超过 47 行
注释
不用的代码删除,而不是注释,有 svn 呢
,否则混淆试听并且增加人脑负担
注释用来描述干什么的(最好这都不要,
用你的代码说明一切 - 命名),为什么这
么干
Agenda
•   代码实践
•   设计实践
•   android 实践
•   更多…
原则
以功能为导向,而非过程
低耦合,高内聚
解耦
数据和 UI 分离
更重要是解开数据与 activity 上下文的耦合
,因为同一数据可能跨多个 a      ctivity
数据再可以根据业务分成不同模块,顶多
门面模式一下
数据管理
同样的数据只保存一个副本,否则难以维
护且浪费内存
配置数据和业务数据分开
全局数据和局部数据? Activity
context/Applica context?
               tion
纯数据对象
纯数据对象跟 ma 比有啥好处? j 串呢
         p       son
?直观,静态检查
尽量不用纯数据对象
封装数据和操作
静态变量
不那么 OO
不利于垃圾回收,它的生命周期与类加载
器一致,需要显式释放
静态变量对象引用到上下文,容易引起内
存泄露
尽量杜绝使用静态变量,除非 final它
单例
跟静态变量一样,难以回收
如果需要上下文 , 与上下文生命周期不一
致是不稳定的因素
尽量少用,除非是全局只读数据
静态方法
不那么 OO
最好只在工具类中使用
多线程
线程运行不靠谱,依赖于虚拟机的线程调
度
需要处理同步,复杂度高
少用多线程,宁愿多进程(比如 service )
异常处理
try 块不要过大,特别是不要嵌套
尽量不要用异常来做流程控制
不处理的异常尽量向上抛,而不是被猫吃
掉
异常捕获不是万能的,不要出现问题全套
进来
访问控制
建议显式的声明访问控制
尽量使用存取方法,而不是点操作
同步 vs异步
别等我,我会告诉你
回调比返回值优美(比如网络)
耗时操作必须异步
Agenda
•   代码实践
•   设计实践
•   android 实践
•   更多…
view or activity?
以功能导向,同一功能的可以放在一个
a ctivity ,不同的分开
没必要自己维护 view 树结构,考虑
setContentView()
图片
图片是内存使用大户,主动回收
可以考虑使用软引用
可以保存图片数据 (byte[ ] ), 而不是 bitma 对
                              p
象
尽量不要去处理图片(合成,拷贝等)
回收再利用的对象
数组类( list类)的视图尽量使用
AdapterView
Adapter的使用,注意使用 convertView
可以考虑 viewHolder
活用资源
尽量使用资源解决问题,而不是代码
资源包括: layout,dra ble,va
                wa     lues,a 等
                             nim
可以考虑自定义的资源,来描述一些数据
对象生命周期

能局部(没有上下文生命周期那么长
)的不全局保存
保证 a     ctivity 中的对象与 activity 本身的
生命周期一样长
过长的生命周期的对象可以考虑引用
applica context
       tion
在生命周期回调函数适当的地方释放
内存,特别是静态变量
流和游标
记得关闭流,文件句柄等
游标关闭,使用方需要关闭
Agenda
•   代码实践
•   设计实践
•   android 实践
•   更多…
操作性
不追求完美, 1 00%
目标 ,80%
随手改进,小步快跑
继续…
好的设计、架构是自己长出来的(迭代)
根据实际需求,而不是想象的需求,别过
度设计
没有完美,适合的就是最好的
Q &A
T hanks!

Contenu connexe

Similaire à Android最佳实践

Web爬虫那点事
Web爬虫那点事Web爬虫那点事
Web爬虫那点事Yihua Huang
 
Top100summit前端的云时代支付宝前端平台架构 王保平
Top100summit前端的云时代支付宝前端平台架构  王保平Top100summit前端的云时代支付宝前端平台架构  王保平
Top100summit前端的云时代支付宝前端平台架构 王保平drewz lin
 
构建可维护的Javascript 小米网
构建可维护的Javascript 小米网构建可维护的Javascript 小米网
构建可维护的Javascript 小米网yang alex
 
掌星 移动互联网开发笔记-Vol002
掌星 移动互联网开发笔记-Vol002掌星 移动互联网开发笔记-Vol002
掌星 移动互联网开发笔记-Vol002rainx1982
 
N-layer design & development
N-layer design & developmentN-layer design & development
N-layer design & developmentXuefeng Zhang
 
My sql数据库开发的三十六条军规
My sql数据库开发的三十六条军规My sql数据库开发的三十六条军规
My sql数据库开发的三十六条军规isnull
 
MySQL数据库开发的三十六条军规
MySQL数据库开发的三十六条军规MySQL数据库开发的三十六条军规
MySQL数据库开发的三十六条军规mysqlops
 
Mysql数据库开发的三十六条军规 石展_完整
Mysql数据库开发的三十六条军规 石展_完整Mysql数据库开发的三十六条军规 石展_完整
Mysql数据库开发的三十六条军规 石展_完整Yousri Yan
 
Data Analyse Black Horse - ClickHouse
Data Analyse Black Horse - ClickHouseData Analyse Black Horse - ClickHouse
Data Analyse Black Horse - ClickHouseJack Gao
 
Python小团队不妨知道的技术
Python小团队不妨知道的技术Python小团队不妨知道的技术
Python小团队不妨知道的技术jie.wang
 
What do you mean, Backwards Compatibility? (Chinese)
What do you mean, Backwards Compatibility? (Chinese)What do you mean, Backwards Compatibility? (Chinese)
What do you mean, Backwards Compatibility? (Chinese)Trisha Gee
 
重构——关于可读性、原则和模式
重构——关于可读性、原则和模式重构——关于可读性、原则和模式
重构——关于可读性、原则和模式cnfi
 
Best practice for coding
Best practice for codingBest practice for coding
Best practice for codingBin Feng
 
张勇 搜搜前端架构
张勇 搜搜前端架构张勇 搜搜前端架构
张勇 搜搜前端架构isnull
 
Dreaming Infrastructure
Dreaming InfrastructureDreaming Infrastructure
Dreaming Infrastructurekyhpudding
 
[2008]网站重构 -who am i
[2008]网站重构 -who am i[2008]网站重构 -who am i
[2008]网站重构 -who am iTwinsen Liang
 
Djt22 justinliu djt.qq.com
Djt22 justinliu djt.qq.comDjt22 justinliu djt.qq.com
Djt22 justinliu djt.qq.comdrewz lin
 
Djt22 justinliu djt.qq.com
Djt22 justinliu djt.qq.comDjt22 justinliu djt.qq.com
Djt22 justinliu djt.qq.comdrewz lin
 
Mysql遇到的一些问题
Mysql遇到的一些问题Mysql遇到的一些问题
Mysql遇到的一些问题wang tongchao
 
Taobao数据库这5年
Taobao数据库这5年Taobao数据库这5年
Taobao数据库这5年yp_fangdong
 

Similaire à Android最佳实践 (20)

Web爬虫那点事
Web爬虫那点事Web爬虫那点事
Web爬虫那点事
 
Top100summit前端的云时代支付宝前端平台架构 王保平
Top100summit前端的云时代支付宝前端平台架构  王保平Top100summit前端的云时代支付宝前端平台架构  王保平
Top100summit前端的云时代支付宝前端平台架构 王保平
 
构建可维护的Javascript 小米网
构建可维护的Javascript 小米网构建可维护的Javascript 小米网
构建可维护的Javascript 小米网
 
掌星 移动互联网开发笔记-Vol002
掌星 移动互联网开发笔记-Vol002掌星 移动互联网开发笔记-Vol002
掌星 移动互联网开发笔记-Vol002
 
N-layer design & development
N-layer design & developmentN-layer design & development
N-layer design & development
 
My sql数据库开发的三十六条军规
My sql数据库开发的三十六条军规My sql数据库开发的三十六条军规
My sql数据库开发的三十六条军规
 
MySQL数据库开发的三十六条军规
MySQL数据库开发的三十六条军规MySQL数据库开发的三十六条军规
MySQL数据库开发的三十六条军规
 
Mysql数据库开发的三十六条军规 石展_完整
Mysql数据库开发的三十六条军规 石展_完整Mysql数据库开发的三十六条军规 石展_完整
Mysql数据库开发的三十六条军规 石展_完整
 
Data Analyse Black Horse - ClickHouse
Data Analyse Black Horse - ClickHouseData Analyse Black Horse - ClickHouse
Data Analyse Black Horse - ClickHouse
 
Python小团队不妨知道的技术
Python小团队不妨知道的技术Python小团队不妨知道的技术
Python小团队不妨知道的技术
 
What do you mean, Backwards Compatibility? (Chinese)
What do you mean, Backwards Compatibility? (Chinese)What do you mean, Backwards Compatibility? (Chinese)
What do you mean, Backwards Compatibility? (Chinese)
 
重构——关于可读性、原则和模式
重构——关于可读性、原则和模式重构——关于可读性、原则和模式
重构——关于可读性、原则和模式
 
Best practice for coding
Best practice for codingBest practice for coding
Best practice for coding
 
张勇 搜搜前端架构
张勇 搜搜前端架构张勇 搜搜前端架构
张勇 搜搜前端架构
 
Dreaming Infrastructure
Dreaming InfrastructureDreaming Infrastructure
Dreaming Infrastructure
 
[2008]网站重构 -who am i
[2008]网站重构 -who am i[2008]网站重构 -who am i
[2008]网站重构 -who am i
 
Djt22 justinliu djt.qq.com
Djt22 justinliu djt.qq.comDjt22 justinliu djt.qq.com
Djt22 justinliu djt.qq.com
 
Djt22 justinliu djt.qq.com
Djt22 justinliu djt.qq.comDjt22 justinliu djt.qq.com
Djt22 justinliu djt.qq.com
 
Mysql遇到的一些问题
Mysql遇到的一些问题Mysql遇到的一些问题
Mysql遇到的一些问题
 
Taobao数据库这5年
Taobao数据库这5年Taobao数据库这5年
Taobao数据库这5年
 

Android最佳实践

Notes de l'éditeur

  1. 有内存泄露
  2. OO :抽象,封装,多态
  3. 影响后续流程
  4. 事实上,有些 API 只开放给资源
  5. Android 源代码 Vs 塞班源代码