在我的应用程序中,当用户从列表中点击文档时,我需要为文档提供下载功能。
因此,我想到了多个活动线程AsyncTask。但是我也注意到人们并不推荐AsyncTask用于这种操作。因为在这种情况下大号。线程将开始攻丝文档。
不采用AsynTask的另一个原因是“现代AsyncTask仅限于128个并发任务”。意味着如果您在完成138个任务之前排队,则您的应用程序将崩溃。
executeOnExecutor()方法会解决我的目的还是需要对其进行重新思考?
如果我同时启动50个任务,那么所有这些任务都通过executeOnExecutor()运行simeltenioulsy吗?
并发任务限制(128)是否也适用于executeOnExecutor()?
我希望得到完美的答案。
最佳答案
不采用AsynTask的另一个原因是“现代AsyncTask仅限于128个并发任务”。意味着如果您在完成138个任务之前排队,则您的应用程序将崩溃。
更准确地说,AsyncTask
的内置执行程序使用128个元素的工作队列来处理正在等待线程的请求。但是请注意,此限制未记录在案,并且可能会发生变化。
将executeOnExecutor()方法解决我的目的
这完全取决于您提供给Executor
的executeOnExecutor()
种类。
如果我同时启动50个任务,那么所有这些任务都通过executeOnExecutor()运行simeltenioulsy吗?
否。对于初学者来说,您的CPU没有那么多内核。
并发任务限制(128)是否也适用于executeOnExecutor()?
仅当您使用该限制设置Executor
时。如果您使用两个内置的AsyncTask
执行程序(SERIAL_EXECUTOR
,THREAD_POOL_EXECUTOR
)之一,则可以,该队列限制应该到位。