本文从各个方面来讲解了如何进行Android客户端的优化。
一:网络方面的优化
1:不用域名,而是直接使用IP进行直连。
省去了域名解析为ip的时间,首次域名解析大概需要几百毫秒,可以通过ip直连省去这部分的链接时间,同时也可以预防域名劫持带来的风险。
当然,为了保证安全和扩展,这个IP可以是动态的IP的列表,并且在IP不可访问的情况下进行域名访问。
2:服务器合理部署
服务器多运营多地部署,一般至少含三大运营商。这个一般公司具体的实际情况来进行考虑。你懂得。
3:连接复用
HttpClient以及HttpUrlConnection都可以开启连接复用即Keep-alive。对于Android来说,在2.2之前由于HttpUrlConnection由于连接池出现bug,所以
在2.2之前建议用HttpClient,2.2之后使用HttpUrlConnection。原因在于后者更轻量级,有更好的API以及在4.x之后有缓存的加入。
4:请求合并
对应多个请求合并为一个进行请求,这样可以节约多次的网络访问。
5:减小请求数据的大小
(1)对应POST请求,Body可以进行Gzip压缩,如日志。
(2)对请求头进行压缩(Http1.1不支持)
6:CDN缓存静态的资源
缓存常见的静态资源,以免多次请求
7:减小返回数据大小
(1)数据返回由服务器进行Gzip压缩
(2)采用Json格式数据代替XML ,图片格式采用WebP格式。
(3)对应不同设备不同网络获取不同分辨率的图片大小
(4)增量更新(只更新未更新的数据,而不是全部更新)
(5)数据缓存
8:数据预取
二,从代码编写上进行优化
1:如果你要使用String,并且知道你要拼接字符串,那么就请使用StringBuilder而不是String。如果你要截取字符串,那么请用原来对象来代替截取的字符串
2:一组int型数据要比一组Interger数据更加的简洁,同时2个一维数组要比一个二维数组更加的简单。当然我们在代码可观以及优化上,可以适当的妥协。
3:尽可能的使用static final来修饰一个常量,因为当你使用的时候会更加的迅速。
4:在Android的JavaBean中,也就是实体类。尽量的不要使用setter/getter方法,这会影响效率,当然你可以根据需求适当的添加对应的方法。
5:比较下3中循环
static class Foo {
int mSplat;
}
Foo[] mArray = ...
public void zero() {
int sum = 0;
for (int i = 0; i < mArray.length; ++i) {
sum += mArray[i].mSplat;
}
}
public void one() {
int sum = 0;
Foo[] localArray = mArray;
int len = localArray.length;
for (int i = 0; i < len; ++i) {
sum += localArray[i].mSplat;
}
}
public void two() {
int sum = 0;
for (Foo a : mArray) {
sum += a.mSplat;
}
}
通过比较你会发现用for each会更快,其中zero()方法执行最慢,one()其次,最后是two();
6:避免使用float,因为其速度会比int慢一倍。