【问题标题】:Parallel execution of async task in AndroidAndroid中异步任务的并行执行
【发布时间】:2014-06-12 16:55:44
【问题描述】:

我有一个名为TestTaskAsyncTask,我需要运行AsyncTask 10 次。我在for 循环内调用AsyncTask 十次。我希望所有 10 个AsyncTask 并行运行。我该如何实现?

【问题讨论】:

  • 你能贴出你有调用它的代码,并指出它的作用吗?可能有更好的方法
  • 是什么让您认为这组任务尚未并行运行?
  • 至于实际的话题,重要的是要意识到 AyncTasks 在某种程度上并行执行的可能性,或不并行,因 Android 版本而异。

标签: android performance android-asynctask threadpool


【解决方案1】:

【讨论】:

  • 除了您的链接确实没有直接相关的事实之外,OP 所要求的可能不是一个好主意,因为他们会多次运行相同的任务而不知道哪个会完成哪个顺序。
  • @codeMagic - 你认为哪个先完成很重要的依据是什么?
  • @ChrisStratton 相同的任务正在运行,因此,很可能,它正在做同样的工作,这意味着更改相同的变量、文件等......这意味着一个可能会在另一个需要之前被更改到。显然,如果不了解更多关于任务的作用或 OP 想要什么,就不可能说这是否是一种不好的方法。但是仅仅假设并行执行在这里是危险的。
  • @codeMagic - 你似乎没有注意到并行执行是问题标题中明确的目标。
  • 通常我们会尝试回答所提出的问题,是的。至少,我们不会攻击试图回答它的人。如果您对该问题有疑问,也许您应该在该问题上发布这些具体问题,而不是在与它们无关的答案上。
【解决方案2】:
for(int x=0;x<=10;x++)
{
     new TestTask().execute(args...)
}

【讨论】:

  • 答错还是会同步执行。
  • 你为什么这么说?
  • 来自文档“从HONEYCOMB开始,任务在单线程上执行,避免并行执行导致的常见应用错误。”
  • 使用这个代替执行 asyncTask.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
【解决方案3】:

你的问题在
https://stackoverflow.com/a/36078608/2249287有详细解释

在此链接答案之上,为了解决您的问题,解决方案是使用自定义执行器执行您的 Asynctask,如下所示,

int mCorePoolSize = 10; (u can increase this number as well)
    int mMaximumPoolSize = 80;
    int mKeepAliveTime = 10;
    BlockingQueue<Runnable> workQueue = new LinkedBlockingQueue<Runnable>(mMaximumPoolSize);
    Executor mCustomThreadPoolExecutor = new ThreadPoolExecutor(mCorePoolSize, mMaximumPoolSize, mKeepAliveTime, TimeUnit.SECONDS, workQueue);
    YourAsyncTask.executeOnExecutor(mCustomThreadPoolExecutor);

您还可以验证是否所有 10 个 AsyncTask 在工作室中并行运行,如该链接所示...

【讨论】:

    猜你喜欢
    • 2018-08-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多