Android开发规范及项目规范

fengyu0506 贡献于2015-05-25

作者 User  创建于2014-04-29 01:24:00   修改者nn  修改于2015-04-09 02:37:00字数4184

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

项目组Android开发规范 Android开发规范 版本:1.0 一、 工具及环境规范 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 项目组Android开发规范 如用户设置界面:UserSettingAdapterHolder, 用户信息界面:UserInfoAdapterHolder (7) layout的命名, (a) activity对应的xml,模块_+修饰_+activity.xml 如用户设置界面:user_setting_activity.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过滤器,以加快传送速度; 项目组Android开发规范 (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,用户密码验证失败. 项目组Android开发规范 (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(),否则破坏系统回收频率 项目组Android开发规范 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) 美工出图时尽量出高清图,高清图适配低清,否则低清图适配高清容易造成失真 项目组Android开发规范 (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、技术文档交流,可将学习到的技术资料放在共享库中;

下载文档到电脑,查找使用更方便

文档的实际排版效果,会与网站的显示效果略有不同!!

需要 8 金币 [ 分享文档获得金币 ] 3 人已下载

下载文档