Android开发规范

一、 工具及环境规范

1、建议统一开发环境,包括JDK、android sdk、eclipse、adt、svn等 , 环境统一后,使得各开发人员在相互调试代码时做到快捷、方便
2、作bug系统,即类似友盟的bug系统,以方便开发人员追踪已上线版本的应用出现的bug。
3、代码时使用ctrl+shift+f进行代码格式化。其中preferences->Java->Code Style->Formatter->Edit->Line warpping设置格式化列数,建议统一定成160个字。
4、在Preferenes->General->Workspace->设置编码格式,建议统一设置为UTF-8。

二、 编码规范

1、命名规范(以主流的驼峰式为主)
(1) 成员变量、局部变量,以驼峰式方式展示,如private String mUserInfo,参考Android源码命名,即m+各单词首字母大写
(2) 静态变量、常量,以大写、下划线为主,如public static String USER_INFO="";
(3) Activity的命名:模块+修饰+Activity,
如用户设置界面:UserSettingActivity,用户信息界面:UserInfoActivity
(4) Fragment的命名:模块+修饰+Fragment,
如用户设置界面:UserSettingFragment,用户信息界面:UserInfoFragment
(5) Adapter的命名: 模块+修饰+Adapter
如用户设置界面:UserSettingAdapter,用户信息界面:UserInfoAdapter
(6) Holder的命名:模块+修饰+AdapterHolder
如用户设置界面:UserSettingAdapterHolder,
用户信息界面:UserInfoAdapterHolder
(7) layout的命名,
(a) activity对应的xml,activity+模块+修饰.xml
如用户设置界面: activity_user_setting.xml,
用户设置界面:user_info_activity.xml
(b) listview item对应的xml,模块
+修饰+item.xml
如用户设置item:user_setting_item,用户设置界面:user_info_item.xml
(c) 组件对应的xml,widget
+模块+修饰.xml
如widget_pull_down_view.xml
(8) layout中的id命名
命名规则:修饰_+x(x为layout或view等)
RelativeLayout、LinearLayout等四大布局:如top_bar_layout
TextView、EditText:如user_info_text
ImageView:如user_info_img
Button、ImageButton:如user_info_btn
ListView:如user_info_list
GridView:如user_info_grid
(9) drawable的命名
命名规则:修饰+d(default)/p(press)/s(select)
如用户头像
正常状态:user_icon_d.png
选择状态:user_icon_s.png
按下状态:user_icon_p.png
2、编码规范
(1) 服务器提供的字段通用,如在A、B接口中传送相同的字段时传送的value类型相同,不能一下yes/no,一下true/false;
(2) 服务器提供的字段简明扼要,尽量简短,加快传送速度,如userId使用id即可;要求服务器传送的数据尽量尽量添加Gzip过滤器,以加快传送速度;
(3) 统一服务器传送数据的方式,HttpClient(适合json传送)比HttpURLConnection(适合xml传送)传送较为方便,解析起来有面向对象的思路;
(4) 成员变量放在所有方法之前,这样方便开发人员查找成员变量的位置;
随意放位置,查找起来较为繁琐;
(5) 一个方法中尽量不超过100行,这样代码的可观性会稍强些;
(6) 避免代码的冗余,利用好抽象、封装、继承、多态,做到代码的重用,更大可能地利用到各项目的重用;
(7) 开发人员在开发项目时注意null、数组越界等常见的exception,如在使用该对象时,觉得有可能会出null指针的情况下,必须考虑进去,不然在测试时不出现,在客户手上出ANR错误,严重影响用户体验;
(8) 较为占用内存的对象手动设置null或recycle,以保证对象在最快的时间内被系统gc查找到;
(9) 处理内存优化时,可斟酌地使用SoftReference(仅在内存不足情况下执行gc才会将object回收,正常情况下gc不清理;softreference对象)或WeakReference(在执行gc时会将object对象回收),以达到内存释放;
(10) 在使用了数据库游标、字符流、字节流、service等,应将这些对象关闭,否则容易造成内存泄漏;
(11) 充分使用service与IntentService,Service适用于检查更新,IntentService适用于下载;
(12) 布局文件复用,使用include和merge标签达到布局文件的复用.组件通用,将经常使用的组件封装好,做好通用.
(13) style的复用,在一些组件的样式较为相同时,提取出相同的style放入styles.xml中.
(14) dip与sp的使用,dip适用于view的宽高,sp适用于textSize.
(15) 输入框的优化,如有多个输入框时可让键盘具有下一个功能,如数据库有搜索功能,可让键盘有搜索功能;
在用户体验上键盘放置位置是覆盖edittext还是将edittext往上挤压.
(16) 做好国际化,所有的java代码中只能注释为中文,其他提示语全部放在string.xml中;尽量不让服务器传送提示语,服务器的提示以errorcode方式传送过来,客户端通过errorcode来判断提示何种文字,如errorcode=1,用户密码验证失败.
(17) 采用mvc风格,做到高内聚低耦合。

三、 项目规范

(1)引用第三框架时,如第三方框架提供了jar包,直接导入即可;如只提供了源代码,则开发人员自己执行ant脚本或export出jar包提供给项目导入;源代码放入svn某特定位置,以方便其他开发人员学习;
(2)在svn目录下建立一个代码共享库,各开发人员可将开源的代码放入到这个共享库,方便技术交流;
(3)开发人员写的api,需要提供文档或demo,文档或demo逻辑要清晰,做到让同组的开发人员拿过来就能使用。
(4)尽量利用好抽象、封装、抽象、多态等,使用设计模式、反射等。

四、 性能优化

1、在不被继承的class上添加final
如: public final class A{}

2、for (int j = 0; j < element.length; j++)
改为for(int j = 0 , k = element.length; j < k ; j++)
减少执行element.length的次数

3、去除冗余的import,执行ctrl+shift+O

4、在eclipse提醒的地方添加@SuppressWarnings
让编译器更快知道真正有效的warning,加快编译速度

5、不显式调用System.gc(),否则破坏系统回收频率

6、选择集合的优先顺序
数组>List>Vector
数组不易确定长度,数组长度为真实长度
List异步,在add(object)时数组长度增加0.5倍
Vector同步,在add(object)时数组长度增加1倍
如List执行add(object)10次,则数组长度为15;
Vector执行add(object)10次,则数组长度为20

HashTable:同步,null不可作为key、value
HashMap:异步,null可作为key、value,
HashSet,异步,null可add

7、尽量使用ApplicationContext替代Context,使用Context不容易将内存释放

8、布局文件层次尽量少,如果层次过大,将影响用户在性能较差的机器进行体验。建议布局层次控制在10层之内。

9、在如下情况:
(1) 小米,有自带的清理功能,容易将内存中的数据清理.
(2) 应用长期放入后台,当内存不足情况会将内存清理
在编写代码时将数据放入文件中而不放static变量中,如登录的用户信息放在Sharepreference中,每次直接从其中取值
如果实在需要将数据放入static变量中,如模块信息,需要在activity的onSaveInstanceState执行保存。这样可以保证
在执行内存清理后打开应用还能将数据找回。

10、Res资源的优化
(1) 美工出图时尽量出高清图,高清图适配低清,否则低清图适配高清容易造成失真
(2) 高清图放入drawable-h文件中,如果放入drawable-m中会比放在drawable-h中占更大的内存
(3) 美工出图时注意图片不能过大,否则容易占用android内存,而且不易释放
(4) 使用容易占用内存的图片资源时,不直接在布局文件中添加图片资源,在需要显示该组件时进行setBackgroundResourse(drawable),不再显示时执行setBackground(null),这样方便在activity消亡时
内存可及时释放

11、在代码上线时使用2.3API中的StrictMode检查内存溢出问题
此类可检查数据库、游标等是否关闭

12、在应用过于庞大时,可将一个应用放入多个进程中
因一个应用默认情况下只开启一个进程,并且进程名为包名,通常地,开启24M的内存
若一个应用包含较多的模块时,且均占用较大的内存,可将占大内存的模块放入另一个进程中,达到多进程通信,增加应用内存
如播放音乐的Service可不放在主进程。

13、list view将view放入holder,以方便view的重用,增强性能。

五、技术交流

1、定期开展android技术交流,让android研发人员接触新知识,以讲课的形式探讨技术为主;
2、技术文档交流,可将学习到的技术资料放在共享库中;

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 219,110评论 6 508
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,443评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 165,474评论 0 356
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,881评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,902评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,698评论 1 305
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,418评论 3 419
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,332评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,796评论 1 316
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,968评论 3 337
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,110评论 1 351
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,792评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,455评论 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,003评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,130评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,348评论 3 373
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,047评论 2 355

推荐阅读更多精彩内容