Android开发经验记录
一、 代码规范
定一个规范的主要目的,是为了让不同的开发人员写的代码能保持一致性,方便别人看自己的代码。另外,对个人来说,也能起到让自己看着舒服的作用。
1. 基本
* 使用UTF-8编码
* 使用Tab进行缩进
* 对待旧代码的态度:许多旧代码的风格比较乱,我们没有必要专门全部改一遍,只需要“顺带手”改了就好,例如你改了一个旧的函数,那就顺便把里面的代码风格都统一一下就好,自己看着也舒服
* 采用Java标准方式写大括号,即大括号跟在代码的最右边而不是另起一行:
void funcName() {
if(a == 0) {
//...
}
}
2. 命名
* 所有Java代码采用驼峰命名法:isFavorite、ActivityMain
* 所有xml文件、资源文件采用下划线命名法,首字母小写:activity_main.xml、ic_launcher.png
* 所有类名首字母大写:BaseAPI
* 所有方法首字母小写:requestList()
* 所有变量首字母小写,且成员变量推荐采用小m开头:mContext
* 所有常量全大写,使用下划线连接:DEBUG_PRINT
3. 注释
* 注释的作用是让别人容易看懂我们的代码,所以注释只需要在必要的地方出现即可,更多的时候,我们应该通过起一个好名字(函数、类、变量、常量)来减少注释
* 以下地方必须要有注释:类的说明、类对外提供的函数的说明、类对外提供的变量及常量,且应该使用 /** 式的注释,这样在IDE里能够直接把鼠标放上去看到东西
* 在关键程序段,应该添加注释,例如某段很拗口的逻辑,应该要说明它是做什么用的,注释应主要说明 目的 而不是 过程
* 函数的注释应该说明各个参数的作用,以及返回值
* 要养成做好事留名的习惯,在自己创建的类,应该在类说明里留自己的名字。如果在别人的类里加函数,应该在函数里留下自己的名字。变量、常量也类似
4. 关于第三方库
* 对待第三方库的态度:第三方库能够大大减少我们的工作量,但是使用不当也会让我们陷入泥潭,一般来说遵循一些简单的规则就可以帮助你选择第三方库:
** 复杂度:如果某个功能需要考虑大量异常处理和细节,而且又是十分通用的,那么就应该考虑使用第三方库,典型的例子是:网络访问(Volley)、图片加载(UniversalImageLoader)、JSON解析(FastJSON、GSON)
** 成熟度:一般来说,我们应尽量选择成熟的第三方库,判断的标准包括:发布地点(例如Github)、是否持续维护(看提交记录)、通过搜索查看排名、通过Github搜索查看排名
** 修改规模:有些第三方库我们拿过来并不能直接用,可能需要进行一些修改,这时候我们就需要注意了。如果需要修改的部分(或者是未来可能需要修改的部分)不少,那我们很可能需要考虑自己来写,因为有时候修改花得时间比自己写还要多的多,事实上,无数前车之鉴已经展示了这一点。此外,尽量不要修改第三方库,因为许多第三方库本身会进行升级
* 此外,引入第三方代码有两种方法:
** 把第三方库作为外部库的方式引用:即在工程属性里添加依赖关系,这样做的好处是可以保持工程的独立性,缺点是工作环境下会有好多工程,而且如果修改了依赖的工程,需要clean一下才会生效。
** 把第三方库代码直接放到主工程里:这样的好处是不会有很多外部工程,但缺点是需要把资源文件(res等)也加进来,如果哪天你要删掉这个库,那就蛋疼了。
其实权衡的方法也很简单,如果第三方库的资源文件特别多,那我建议用外部库方式,如果第三方库代码文件比较少,可以考虑直接放到主工程里。
二、 多人协作
多人协作时需要注意的问题是如何合理分工,同时保证效率,降低沟通成本,有一些基本经验:
* 划分模块:一般按照界面进行划分是比较合理的,对于公用的数据模型及网络访问函数,可以统一由一个人写,也可以让负责某个界面的人来负责对应的网络函数;
* 不重复造轮子:有些界面控件是通用的,就不要重复写,有些网络访问函数是通用的,就用一份。要做到这些,最重要的是主动沟通,在意识到别人有可能需要自己的代码时尽早沟通;
* 防止svn冲突:两个人写同一个文件(特别是网络访问类)时,容易出现冲突,一些小技巧:
* 把可能会多个人同时写的文件分区块,用多个回车分隔开,然后用注释写上是谁的区域。。。
* 尽量一个文件只有一个负责人。。。
* 养成经常更新代码的好习惯。。。
三、 版本发布
在发布版本时,需要按照一定步骤,另外需要注意一些svn的操作方法:
1、 首先,完成各个功能的开发,进行自测;
2、 自测没问题后,进行签名,密码在代码目录的说明文档里。把apk给测试人员测试;
3、 测试人员测出问题,各个模块的负责人进行修改;
4、 经过若干轮修正,基本没有大bug,这时就可以发布了,将最后定稿的apk交给产品经理进行发布;
5、 确定发布版本后,使用svn,创建一个发布分支,在/branches/release_Vx.x目录下,其中Vx.x是版本号,用于备份发布的版本;
如果发布版本迟迟没有确定,而主线版本又要做下一个功能,可以先创建发布分支,然后如果有bug,就在发布分支修改,然后将改动merge到主线上。注意:一定要保证merge的单向性,即只从发布分支合并到主干,而不是从主干合并到发布,那样一会就乱了;
Android开发经验记录的更多相关文章
- Android学习记录(3)—Android中ContentProvider的基本原理学习总结
一.ContentProvider简介 当应用继承ContentProvider类,并重写该类用于提供数据和存储数据的方法,就可以向其他应用共享其数据.虽然使用其他方法也可以对外共享数据 ...
- android 点滴记录 ICCID IMSI IMEI MEID 关系 和 区别,相关参数在什么情况下可以获取...
1:ICCID:Integrate circuit card identity 集成电路卡识别码(固化在手机SIM卡中) ICCID为IC卡的唯一识别号码,共有20位数字组成,其编码格式为:XXXXX ...
- Android Framework 记录之二
接着上次的记录,续写. 23.services文件夹 文件 描写叙述 class AlarmManagerService extends IAlarmManager.Stub { //定时管理服务 p ...
- Android开发记录(转)
一.Android模拟器相关 1. Android模拟器安装 Market 模拟器默认没有安装 Market,看到网上有较为复杂的安装方法,也有1个简单的,试了简单的,在 Android2.2 模拟器 ...
- Android开发经验之—intent传递大数据
在Activity或者组件之前传递信息时,一般採用intent绑定bundle的方式传值,但在使用过程中须要注意的是不要用bundle传递大容量数据: 在做项目的过程中,须要将听写界面的听写结果信息传 ...
- mono for android 学习记录
C#开发Android应用实战(全 扫描 中文版) 学习记录: 拖完控件后,不要急着按F5,需要重新生成,才能自动修改 Resource.Designer.cs 文件 1. Activity 是基于a ...
- Android学习记录:ViewPager实现欢迎页
许多APP在第一次启动的时候,都会有welcome page.近日尝试利用ViewPager来实现Welcome Page. d0711 完成记录,跟新下载地址 =================== ...
- Android学习记录:界面设计
本片文章将记录进行android界面开发时积累的知识 包括 activity全屏 activity跳转 button设计 逐个输入编辑框设计 d0710 合并旧文章总结更新 d0721 添加内容 == ...
- 【Android】Android 学习记录贴
官网 教程学习笔记 Genymotion 安卓虚拟器太慢,用Genymotion(装载eclipse的插件) 利用Genymotion运行Android应用程序 1.首先,点击 来启动或者创建您要使用 ...
随机推荐
- [DOM]有一种节点叫做文本节点
HTML可以看成是由节点(node)组成的树结构 我们一般都是在<p>节点里面写字符串. 在上图中,<p>节点和字符串之间有一个text, 这个text就是文本节点. 我们可以 ...
- 解决EnableVisualStyles Bug
一位朋友碰到了一个WinForm的问题,在网上搜了一通,没找到能解决问题的方案, 正好我以前以碰到过,在这里把解决方案呈上,以便有遇到此问题的朋友能有帮助. 问题是这样的,当启用了虚拟样式后,设置好的 ...
- 认识HTML5
引言,认识两个标准制定的组织 在讲什么是Html5之前得先了解两个组织:WHATWG :网页超文本技术工作小组(英语:Web Hypertext Application Technology Work ...
- Describe the difference between repeater, bridge and router.
中继器,路由器,网桥,网关的区别. 路由器:网络层设备,实现复杂的路径选择,控制IP包从源到目的地的路径:根据IP地址进行选路和转发IP数据包 中继器:物理层设备,物理信号的重新生成,对信号进行整形和 ...
- bootstrap IE兼容
<meta name="viewport" content="width=device-width, initial-scale=1"> & ...
- C语言字符串与字符数组
字符串儿与字符数组 字符数组的定义: Char buffer[]; 字符数组初始化: Char buffer1[]="hello world"; 利用scanf输入一个字符串儿 代 ...
- python多进程中的队列数据共享问题
0x00 起 今天在写一个小东西的时候,需要控制并发量,但又不能直接调用python multiprocessing(问题会在文后提到).于是尝试用Queue来实现. 最一开始的思路是这样的: fro ...
- MyEcpilise引入Maven项目目录不正常,无JRE,无Maven Dependencies
右键项目--> Maven4MyEclipse --> Update Project Configuration
- 一个好用且方便的FastCgi C++库 - FastCgi++
不知道你是不是曾经发愁过使用FastCgi库来使用C++开发Fastcgi程序繁琐而且会与C++ STL代码产生冲突的地方,或者你还是习惯了cout而不是pringf,那这篇文章就可以了解到一个使用的 ...
- [转载]jquery获取元素索引值index()方法:
jquery的index()方法 搜索匹配的元素,并返回相应元素的索引值,从0开始计数. 如果不给 .index() 方法传递参数,那么返回值就是这个jQuery对象集合中第一个元素相对于其同辈元素的 ...