AsyncTasks之间的Android睡眠(超过128)

时间:2016-12-30 21:59:45

标签: android android-asynctask

注意:我正在处理的应用仅供个人使用。我正在尝试为我的硕士论文收集数据。

我试图一次启动超过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) {

启动AsyncTask

我正在寻找SIMPLEST解决方案,而不是最好的方法!

1 个答案:

答案 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);