Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/meteor/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android中异步任务的并行执行_Android_Performance_Android Asynctask_Threadpool - Fatal编程技术网

Android中异步任务的并行执行

Android中异步任务的并行执行,android,performance,android-asynctask,threadpool,Android,Performance,Android Asynctask,Threadpool,我有一个名为TestTask的AsyncTask,我需要运行AsyncTask 10次。我在for循环中调用AsyncTask十次。我希望所有10个异步任务并行运行。如何实现这一点?线程池是您需要的 有一个关于你的问题的详细解释 在这个链接答案的顶部,要使您的问题有效,解决方案是使用自定义执行器执行您的异步任务,如下所示 int mCorePoolSize = 10; (u can increase this number as well) int mMaximumPoolSize =

我有一个名为TestTask的AsyncTask,我需要运行AsyncTask 10次。我在for循环中调用AsyncTask十次。我希望所有10个异步任务并行运行。如何实现这一点?

线程池是您需要的


有一个关于你的问题的详细解释

在这个链接答案的顶部,要使您的问题有效,解决方案是使用自定义执行器执行您的异步任务,如下所示

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个异步任务都可以在studio中并行运行,如该链接所示…

您可以发布调用该任务的代码,并指出它的功能吗?也许有更好的方法让你觉得这组任务还没有并行运行?至于实际的主题,重要的是要认识到AyncTasks在某种程度上并行或不并行执行的可能性在不同的Android版本之间是不同的。除了你的链接真的没有直接的关系之外,OP所要求的可能不是一个好主意,因为他们会多次运行同一个任务,而不知道哪个任务将按哪个顺序完成。@codeMagic-你认为哪一个先完成很重要的依据是什么?@ChrisStratton同一个任务正在运行,所以很可能,它是在做同样的工作,这意味着改变相同的变量、文件等。。。这就意味着一个人可能会在另一个人需要改变之前被改变。显然,如果不了解更多关于任务做什么或OP想要什么,就不可能说这是一种糟糕的方法还是不好的方法。但是仅仅假设并行执行是正常的是危险的。@codeMagic-你似乎没有注意到并行执行是问题标题中明确的目标这一事实。通常我们会尝试回答被问到的问题,是的。至少,我们不会攻击试图回答问题的人。如果您对问题有疑问,也许您应该在问题上发布这些具体的关注点,而不是在与问题无关的答案上发布。错误答案仍将同步执行。您为什么这么说?从Honeycom开始的文档中,任务在单个线程上执行,以避免并行执行导致的常见应用程序错误。请使用此选项,而不是执行asyncTask.ExecuteOnExecutionAsyncTask.thread\u POOL\u EXECUTOR;
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);