Android各框架的网络请求速度的对比

最近对Android下各个开源框架比较感兴趣,特扒出来看一看,请不要过度的解读,作为您午后茶沾沾嘴还凑合�,内容肯定有很多的漏洞,希望各路大侠拍砖。

本文只是简单探索下各个框架在get请求数据的情况下,所耗时间的差异。这不能完全的代表框架的整体网络请求性能,只是粗略的看出差异。所表现的差异,大多数在用其不同的方式,比如Android—async-http运用的是HttpClient,而Volley运用的是HttpUrlConnection,以及内部实现时候,对其优化的多少。内部的东西我没有深究,只是从表面的形式,看到其效率。故童鞋们可以酌情选择。

注意,我要开始装逼了,后退!!�

各个框架的简单介绍:

Android-async-http

开源地址:https://github.com/loopj/android-async-http

这个框架在用起来非常的爽,基本就是两部就可以搞定请求动作。比如下面:

1
2
AsyncHttpClient client = new AsyncHttpClient();
client.get(...);

这样还不够简洁?

毕竟是基于HttpClient,那么在操作时可以有多么灵活就可想而知了。具体的其他功能,可以移步到官方地址。

Volley

开源地址:https://android.googlesource.com/platform/frameworks/volley/

Android描述Volley的官方地址:http://developer.android.com/intl/zh-cn/training/volley/index.html

Volley官方所说的优点:

  • 请求队列和请求优先级
  • 请求Cache和内存管理
  • 扩展性性强
  • 可以取消请求

但是在真正实测时,效果我感觉…Ehh..balabala…

也许是我使用时的操作不当,总之是这样的:

1
2
3
RequestQueue requestQueue = Volley.newRequestQueue(this);
StringRequest stringRequest = new StringRequest(...);
requestQueue.add(stringRequest);

然后你们就能看到下面的测试结果。。。

afinal

开源地址:https://github.com/yangfuhai/afinal

1
2
FinalHttp finalHttp = new FinalHttp();
finalHttp.get(...);

恩,看上去和我们Android-async-http一样简洁。还行还行。。

不过afinal还有一点比较爽的是,支持注解式代码,这个超级爽啊(其实是装逼�)。不过这也会带来另一个问题,就是给其他不熟悉的童鞋来维护代码时,猛地一看,不知道咋回事儿。orz

xUtils

开源地址:https://github.com/wyouflf/xUtils

不墨迹,见代码:

1
2
3
RequestParams params = new RequestParams(URL);
params.addQueryStringParameter("wd", "xUtils");
x.http().get(...);

不过这里要注意,使用之前要在Application里进行初始化:

1
2
x.Ext.init(this);
x.Ext.setDebug(true);

并且在3.x版本后,建议还得有个BaseActivity来去初始化视图界面

1
2
3
4
5
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
x.view().inject(this);
}

这个千万不要忘记了,否则你怎么调试都不成功。马丹。。

靠,直接 x 进行调用调用,够Geek。

我有次去面试,遇到过有单位用这个框架的,然后…..对我来说并没有什么卵用,我不去有毛蛋用!!

ThinkAndroid

开源地址:https://github.com/white-cat/ThinkAndroid

这个和上面那个鬼框架一样,用的时候一定要注意在Application里添加这一项属性

1
android:name="com.ta.TAApplication"

不过这个也是值得称赞的,毕竟还能支持注解,跟afinal一样。

各框架请求所耗时的对比

下面是各个框架在请求同一个接口时,不同次数返回的耗时结果。

这里为了避免其他代码干扰测试结果,故在计算时间时,以请求开始之前计时,请求成功后第一时间进行计时,计算两个时间段的差。

为了测试更加贴近真实性,我分别进行1-1000次的从低到高的请求次数的对比。当然极少情况下会一次性请求1000次,我这么做是为了能体现出不同框架在短期大量请求时,体现出其性能。并且所有测试都是在同一时间段,同一内网,没有其他设备接入无线网进行干扰的情况下进行测试的。

  • 第一次测试:
请求1次 请求10次 请求50次 请求100次
Android-async-http 227ms 117ms 254ms 734ms
Volley 85ms 151ms 387ms 799ms
Afinal 51ms 48ms 780ms 1070ms
xUtils 16ms 138ms 287ms 853ms
ThinkAndroid 67ms 99ms 332ms 557ms
  • 第二次测试:
请求1次 请求10次 请求50次 请求100次
Android-async-http 45ms 85ms 273ms 494ms
Volley 59ms 170ms 409ms 810ms
Afinal 196ms 208ms 551ms 2382ms
xUtils 39ms 269ms 705ms 610ms
ThinkAndroid 50ms 72ms 352ms 810ms
  • 第三次测试:
请求1次 请求10次 请求50次 请求100次
Android-async-http 60ms 110ms 308ms 442ms
Volley 26ms 264ms 363ms 706ms
Afinal 63ms 200ms 595ms 1293ms
xUtils 60ms 77ms 382ms 565ms
ThinkAndroid 44ms 147ms 397ms 865ms
  • 第四次测试:
请求1次 请求10次 请求50次 请求100次
Android-async-http 50ms 92ms 262ms 601ms
Volley 41ms 123ms 683ms 794ms
Afinal 57ms 141ms 580ms 1111ms
xUtils 42ms 216ms 382ms 1423ms
ThinkAndroid 54ms 98ms 650ms 968ms
  • 第五次测试:
请求1次 请求10次 请求50次 请求100次
Android-async-http 56ms 82ms 264ms 484ms
Volley 34ms 108ms 676ms 694ms
Afinal 45ms 165ms 566ms 1070ms
xUtils 46ms 192ms 282ms 730ms
ThinkAndroid 85ms 94ms 538ms 1166ms

这里我们在测试的时候,发现有些框架在运用时,尤其在请求次数非常多的情况下,如果不处理,会有卡顿UI的现象。比如Android-async-http、ThinkAndroid。所以在用是,自己一定要测试好,在塞到你们项目里,否则得不偿失。

从结果上来看,挺牛的Volley在后期大量数据起来的时候,并没有真正发挥出性能(我指的是1000次的结果)。我也有说,真正使用起来很少有这么大量的使用情况。这是极端。。不过从整体上看,Volley还是比较让人满意的。

但是afinal在短期量比较多的情况下,也开始慢慢被其他框架完爆了。

xUtils和ThinkAndroid表现的就是比较中规中矩了

而Android-async-http,表现的还比较出色,总体来看还能让人满意。

当然这些结果,不能代表其框架就是这个真实水平,因为毕竟网络再怎么贴近真实,还是会有影响的。所以只能大概的看个趋势

耗时趋势图

以上是对对单个接口进行get的请求情况。最后还是那句话,测试结果不代表真是效率,只能运用方便面包装盒上的一句话:图片仅供参考 orz

装逼结束,请打分。