Android开发基础规范

在开发Android项目的过程中,对项目的管理和规范化必不可少。如果我们只是单独开发某一个简单的页面或者是某一个模块,代码的管理似乎并不太重要,而且有时候还会显得非常累赘。但是当项目有多个模块,比如笔者做过的一个视频播放类软件,就涉及到网络请求,UI跳转,视频播放,视频下载,数据统计等等一系列的模块,那么这个时候,对于代码的管理就显得非常重要了。

现在,结合笔者自身的经验,对本人写代码的经验做一个简单的总结,肯定还有许多不完善的地方,留待以后再慢慢补充。

1、整体的代码要做管理

初学开发,或者刚做开发不久的人,可能不明白,代码要做管理?很多人都以为代码管理,仅仅只是代码的规范化和格式化,其实远远不止这些。很多JAVA初学者都觉得代码有IDE编辑器帮我们管理,何必要自己管理,再或者觉得反正JAVA的虚拟机机制会帮我们管理。这种想法很错误。

1.1 文件要有注释

我把文件的注释放在首位,就是因为有时候,我们做开发的时候容易忘记写方法的注释。以前在带团队的时候,我总强调每个方法都要有注释,但是发现执行得并不好,有时候队员也会跟我说,很多方法一看就知道什么意思呀,何必要注释;再或者有的队员就说,我这个类就两个方法,就算不注释也没关系呀?遇到这种情况,大家怎么办的呢?我想大家的反应是不是:哎呀,你现在看得懂,将来就未必看得懂了的。但是队员说,这个方法这么简单,无论什么时候都看得明白呀。额,好吧!

那么事实情况呢?根据笔者经验来看,有时候确实是有这种情况,这个方法确实是一看就能明白什么意思,比如一段拷贝文件的代码,就非常容易理解。那么,是不是就可以不写注释了呢?我的答案是否定的,注释一定要写的!!!

事实上,小公司小团队,有时候为了追求效率,可能就没写注释,我也能够理解,但是,文件的注释,一定不能少!!!

有时候,我们对方法不理解,那么就会阅读文件的注释,所以文件的注释不能少,也不应该只有作者,时间,版本等简略信息,一定要有对本文件的描述,可以简短,但是不能省略。

1.2 增加调试管理

在编写项目的过程中,调试是最常用的手段。调试有多种手法,一种是断点调试,不懂的同学自己科普;另一种就是插入输出代码,检查执行情况。

断点调试有IDE帮我们集成,这里就不多说了,笔者重点强调插入输出调试。

在插入调试过程中,我们常使用一个boolean的常量值,表示是调试状态还是发布状态。下面给出一段代码,是笔者常用的代码之一:

import android.util.Log;

/**
 * 代码调试使用
 * @author test
 *
 */
public class CodeHelper {
	
	private static boolean isDebug = true ;
	
	/**
	 * 打印输出
	 * @param msg
	 */
	public static void outPrint(String msg){
		if (isDebug) {
			System.out.println(msg);
		}
	}
	
	public static void logI(String tag, String msg){
		if (isDebug) {
			Log.i(tag, msg);
		}
	}
	
}
在Android开发中,上面两句输出语句是最常见的。当然,熟悉Android系统的同学,应该已经知道在后来的Android版本中,已经为我们提供了一个全局变量,其位置在gen目录下,代码如下:

public final class BuildConfig {
    public final static boolean DEBUG = true;
}
但是没有自己定义使用来的方便,随个人喜好!

2、全局常量要使用接口

有时候,在Android开发中,我们要使用很多常量,这一点在Android的游戏开发中非常常见。游戏开发中常见的常量有坐标值,速度,时间,生命等等。那么在一般的应用中呢?答案是,也是有的。

以笔者上文所说的播放器项目为例,就涉及到很多常量,最常见的有,网络请求,访问地址等等,遇到这样的情况,最好是将常量单独封装在一个类中。好了,问题又来了,我们知道JAVA中是使用单一继承原则的,那么我们使用这些常量的时候,如何继承呢?在Android中,我们的自定义Activity已经继承了系统的Activity,无法继承其它类了,如果使用类的静态引用,似乎又使用不太方便!

怎么办呢?这个时候,我们考虑使用接口实现!这样,我们就能方便的使用接口中定义的常量了,下面给出一段例子:

/**
 * 常量的接口信息
 * @author test
 *
 */
public interface ConstantsHelper {
	
	/**网络json请求成功*/
	public static final int GET_JSON_SUCCEED = 10001;
	/**客户端请求错误*/
	public static final int CLIENT_PROTOCOL_ERROR = 20001;
	/**网络连接错误*/
	public static final int NET_NOT_LINK = 20002;
	
	public static final String SUB_NEWS_INDEX = "http://baidu.com";
	
	public static final String SUB_NEWS_CONTENT = "/news/index.html";
}


3、XML为国际化做准备

国际化对于曾经做过J2EE开发的人来说,应该不是一个陌生的词汇,我们使用过的框架Struts2就支持了简单明了的国际化操作。当然,一些做android开发的人会有疑问,我的应用又不拿去国际市场,何必要做国际化。额,这个,我也不知道怎么回答。但是,当你在后台看到一些奇奇怪怪的字母打印出来的时候,尤其是看上去像影藏着错误的时候,你会不会暗自不爽?

在编写XML文件的时候,我们经常是让一个字符串的中文字符写入,比如“下一页”“返回”“登录”等等这样的中文字符。实际上这种代码,是不符合Android系统的标准要求的,当然,你在编译的时候它也不会报错。可是这为你写代码留下了隐患,比如你的代码哪天要做国际化了,额,坑爹了吧。。。

还有一个就是间距,要知道,有时候我们的美工做出来的图片,不一定适合我们的程序,我们经常需要修改。很多程序员会先设计一个,等调试完成之后,就复制很多个,这样的代码有着巨大的隐患,其一是,如果宽度或者高度或者间距什么的不合适,就要修改很多个位置;其二,如果哪个配合的程序员修改了字段名,哦,坑爹了吧,你都不知道怎么出的问题。。。。额,笔者曾经被坑过一把,所以大家一定要注意这些问题。

Android的ADT已经对这部分资源文件进行了检测,有时候它会在后台打印一些语句,这些语句会干扰我们对程序的判断,所以建议将字符串,行间距等都放在xml资源文件中,这样,修改起来也挺方便。


4、建立基类继承

在Android开发中,常见的一些模板,或者说在一个项目中,有许多个页面共用一个模板,而只是修改了其中的内容,建议使用基类继承。

根据笔者的经验,最最常见的就是返回和分享按钮在顶部的情况。有时候我们需要去每个类中添加响应事件,这是非常不划算的一件事。所以大家最好写一个基类,比如命名为BaseActivity,然后添加响应,其它有公共模块的类,只需要继承它就行了。




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值