在我的应用程序中,当用户从列表中点击文档时,我需要为文档提供下载功能。

因此,我想到了多个活动线程AsyncTask。但是我也注意到人们并不推荐AsyncTask用于这种操作。因为在这种情况下大号。线程将开始攻丝文档。

不采用AsynTask的另一个原因是“现代AsyncTask仅限于128个并发任务”。意味着如果您在完成138个任务之前排队,则您的应用程序将崩溃。


executeOnExecutor()方法会解决我的目的还是需要对其进行重新思考?
如果我同时启动50个任务,那么所有这些任务都通过executeOnExecutor()运行simeltenioulsy吗?
并发任务限制(128)是否也适用于executeOnExecutor()?


我希望得到完美的答案。

最佳答案

不采用AsynTask的另一个原因是“现代AsyncTask仅限于128个并发任务”。意味着如果您在完成138个任务之前排队,则您的应用程序将崩溃。


更准确地说,AsyncTask的内置执行程序使用128个元素的工作队列来处理正在等待线程的请求。但是请注意,此限制未记录在案,并且可能会发生变化。


  将executeOnExecutor()方法解决我的目的


这完全取决于您提供给ExecutorexecuteOnExecutor()种类。


  如果我同时启动50个任务,那么所有这些任务都通过executeOnExecutor()运行simeltenioulsy吗?


否。对于初学者来说,您的CPU没有那么多内核。


  并发任务限制(128)是否也适用于executeOnExecutor()?


仅当您使用该限制设置Executor时。如果您使用两个内置的AsyncTask执行程序(SERIAL_EXECUTORTHREAD_POOL_EXECUTOR)之一,则可以,该队列限制应该到位。

07-26 01:52