编辑:再次浏览博客文章后,单线程与多线程问题可能不正确。问题是他们没有分享他们的分析/基准测试的血淋淋的细节;这一组数字并不能提供太多洞察力。他们表示,“我们确定从 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
代替AsyncTask
s。不指出这种区别近乎不诚实。我会非常惊讶他们没有意识到AsyncTask
.
归档时间: |
|
查看次数: |
4584 次 |
最近记录: |