早上在遗留的旧系统中看到原有作者在实现版本更新的服务中,直接通过比较两个字符串(一个客户端采集的版本信息,另一个从数据库获取最新版本号)是否相等来判断更新与否。这种做法存在的问题:如果因为配置错误的关系,下载的移动客户端版本号比数据库中版本号还新,那么就会提示下载,而且更严重的是即使下载安装完成后,如果应用是启动就会检查更新,将会出现重复提示更新的问题。
多种方法解决这个问题:(1)客户端和数据库都维护一个版本号和版本编码,版本号用于展示,而版本编码用于版本大小的比较,这个做法比较简单,比较数字大小即可。
(2)比较带点(.)版本号字符串的大小。这种做法比较直接,也是这篇文字的主题。抽取了代码实现分享给大家:
int result = 0;
byte[] b1 = "1.2".getBytes("utf-8");
byte[] b2 = "1.2.6".getBytes("utf-8");
if(b1.length >= b2.length){
for(int i = 0,len = b2.length; i < len; i++){
result |= Byte.valueOf(b1[i]).compareTo(Byte.valueOf(b2[i]));
}
}else if(b1.length < b2.length){
for(int i = 0,len = b1.length; i < len; i++){
result |= Byte.valueOf(b1[i]).compareTo(Byte.valueOf(b2[i]));
}
if(result == 0){//如果前两位都相等,长度长的较大
result = -1;
}
}
if(result >= 0){
//>0表示配置错误,=0表示当前版本为最新
}else{
//说明需要更新
}