同时多个请求的最佳做法是什么

时间:2015-12-24 08:44:33

标签: android

我必须同时在api中发送四个不同的请求。我是否需要为每个请求创建AsyncTask后台线程,或者所有请求都可以通过单个AsyncTask完成。有人可以帮忙吗。

2 个答案:

答案 0 :(得分:1)

这是一个并发问题。在Android中有几十种方法可以做到这一点。我几乎每一篇都写过涵盖这些材料的课程......即便如此,它也不是“简单”。

我个人使用Android的HaMeR(Handler,Messages,Runnable)框架。创建4个runnable并让他们将结果发布到Handler。

然而......这不是最容易实现的。并要求您了解如何安全地创建自己的自定义处理程序(正确使用WeakReference等)。

因此,我建议在executorService上运行asyncTask

myTask.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);默认的线程池执行程序应该从4个线程开始(我相信不需要查找它)。

答案 1 :(得分:0)

我假设你正在使用HttpURLConnections。不幸的是,the documentation中指定的每个连接只能处理一个请求。

但是,您可以(并且可能应该)仍在单个AsyncTask中执行所有请求。 每个AsyncTask都需要创建一个需要大量时间和资源的新线程。所以不要听任何告诉你为每个请求创建新任务的人。

您还可以选择利用HTTP持久性。如果您通过var arrayValues = [[2,3,5],[3,5]] var evalString = '_.intersection('; arrayValues.forEach(function (element, index){ evalString += 'arrayValues['+index+'],'; }); evalString =evalString.slice(0, -1); evalString += ');' eval(evalString); 向您的请求添加标头_.intersection(arrayValues[0],arrayValues[1],...,arrayValues[n]);,则可以通过同一连接发送多个请求,从而节省大量时间和资源。

在Java中有点复杂,因为每个http请求每个httpurl连接规则,但它可以完成。首先,当您完成第一个请求时,HttpURLConnection 不要关闭该连接。然后,要创建下一个连接,请在用于创建第一个HttpURLConnection的相同的URL对象上调用Connection: Keep-Alive。如果可能,JVM将知道重用该连接以节省带宽。

您还可以选择使用HTTP / 2.0多路复用,它允许您同时发送多个请求。不幸的是,我还不够精通HTTP / 2.0来告诉你如何使用它,但包含了多路复用功能来解决这个问题。