是什么让改造比 HttpUrlConnection + AsyncTask 更快?

pad*_*t27 5 android retrofit retrofit2

以下博客比较了各种 Android 异步 Http 客户端的速度。有人能解释一下是什么让改造如此之快吗?

kri*_*son 5

编辑:再次浏览博客文章后,单线程与多线程问题可能不正确。问题是他们没有分享他们的分析/基准测试的血淋淋的细节;这一组数字并不能提供太多洞察力。他们表示,“我们确定从 API(网络)检索数据是瓶颈”,但他们并没有对此进行太多解决。他们是否将所有 Volley 和 Retrofit 请求设为单线程?他们是否尝试对他们的 s 进行多线程处理AsyncTask,以便可以相互比较?他们没有具体说明。

如果将响应解析为 JSONObject 会减慢您的应用程序的速度,我采取的一种方法是使用 JSONReader 以事件驱动的方式解析响应。这可能涉及更多代码,但好处是您可以获得细粒度的控制,因此您可以跳过一些事情,而不会浪费周期来解析您不关心的值。根据您的应用程序,仅此一项就可以大大加快速度。

就我个人而言,我发现他们的断言“Retrofit更易于使用”是选择它来处理我的应用程序中的服务器访问的更有说服力的理由。


来自AsyncTask“执行顺序”下的文档:

首次引入时,AsyncTasks 在单个后台线程上串行执行。从 开始DONUT,这被更改为线程池,允许多个任务并行操作。从 开始HONEYCOMB,任务在单线程上执行,以避免并行执行引起的常见应用程序错误。

如果您确实想要并行执行,您可以使用executeOnExecutor(java.util.concurrent.Executor, Object[])调用THREAD_POOL_EXECUTOR

这意味着每个请求不仅等待前一个请求完成,还等待其所有 JSON 被读取/解析。

默认情况下AsyncTask,Retrofit 是单线程的,但不是。为了公平起见,他们应该使用 theThreadPoolExecutor代替AsyncTasks。不指出这种区别近乎不诚实。我会非常惊讶他们没有意识到AsyncTask.