注意:我正在处理的应用仅供个人使用。我正在尝试为我的硕士论文收集数据。
我试图一次启动超过128个AsyncTasks,因为ThreadPoolExecutor而失败。我已经看到了一些答案,为什么它不起作用,但没有真正回答如何正确实现它。
由于我有很多时间上传我的东西,所以我考虑在开始下一次上传之前让我的MainActivity进入睡眠状态,这似乎不太合适。
for (IrisResult s : results) {
try {
Thread.sleep(1000);
mAzureTableManager.addIrisResult(s);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
方法addirisResult()
实际上按protected Void doInBackground(Void... params) {
我正在寻找SIMPLEST解决方案,而不是最好的方法!
答案 0 :(得分:2)
yourAsyncTask.executeOnExecutor(yourThreadPoolExecutor, params);
增加游泳池大小:
yourThreadPoolExecutor.setMaximumPoolSize(size);
设置允许的最大线程数。这将覆盖构造函数中设置的任何值。如果新值小于当前值,则过多的现有线程将在下一次空闲时终止。
android.developer.com - ThreadPoolExecutor#setMaximumPoolSize(int)
android.developer.com - AsyncTask#executeOnExecutor(Executor, Params...)
作为一个例子:
yourThreadPoolExecutor = Executors.newCachedThreadPool();
yourThreadPoolExecutor.setMaximumPoolSize(256);
yourAsyncTask.executeOnExecutor(yourThreadPoolExecutor, params);