【问题标题】:How many parallel execution possible using executeOnExecuter?使用 executeOnExecuter 可以并行执行多少次?
【发布时间】:2017-03-30 10:50:20
【问题描述】:

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

所以,对于多个活动线程,我想到了 AsyncTask。但我也注意到人们并没有推荐 AsyncTask 进行这种操作。因为在这种情况下大没有。线程将在点击文档时开始。

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

  1. executeOnExecutor() 方法能否解决我的目的,还是我需要重新考虑它?
  2. 如果我同时启动 50 个任务,那么所有这些任务都通过 executeOnExecutor() 同时运行?
  3. 并发任务限制(128)也适用于executeOnExecutor()?

我期待完美的答案。

【问题讨论】:

  • 大多数问题取决于您将执行它的确切执行者。
  • 我将使用 AsyncTask.THREAD_POOL_EXECUTOR
  • 我不确定,但我认为它是一个默认执行器,默认情况下所有异步任务都在其上完成。所以你不需要调用executeOnExecutor,只要execute,如果你想在上面执行它。
  • 在这种情况下我应该使用什么?我的摩托是什么都没有。的文件。他们应该通过线程下载。

标签: android multithreading android-asynctask


【解决方案1】:

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

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

executeOnExecutor() 方法能否解决我的目的

这完全取决于您提供给executeOnExecutor() 的Executor 类型。

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

没有。首先,您的 CPU 没有那么多内核。

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

仅当您将 Executor 设置为具有该限制时。如果您使用两个内置的 AsyncTask 执行器之一(SERIAL_EXECUTOR、THREAD_POOL_EXECUTOR),那么是的,应该有队列限制。

【讨论】:

  • 感谢您的回答。只需要澄清如果 asyncTask 有 150-200 个排队项目,应用程序会崩溃吗?
  • @RohanPatel:这主要取决于您提供给executeOnExecutor() 的Executor 类型,其次取决于您拥有多少堆空间。
  • 我需要通过什么样的 Executor?我的摩托是什么都没有。文件,他们应该通过线程下载。请给我解决方案
  • @RohanPatel:一个你自己创建的,你想要的队列和线程池。
  • 如果您需要下载点击列表项上的任何文件,您的实现方法是什么?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-05-26
  • 2011-12-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多