Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/207.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在异步任务之间睡眠(超过128个)_Android_Android Asynctask - Fatal编程技术网

Android在异步任务之间睡眠(超过128个)

Android在异步任务之间睡眠(超过128个),android,android-asynctask,Android,Android Asynctask,注意:我正在使用的应用程序仅供个人使用。我正在为我的硕士论文收集数据 我正在尝试一次启动128个以上的异步任务,但由于ThreadPoolExecutor而失败。我已经看到了为什么它不起作用的一些答案,但是没有关于如何正确实现它的真正答案 因为我有很多时间上传我的东西,所以我在考虑在开始下一次上传之前先把我的主要活动放在睡眠状态,这似乎不太管用 for (IrisResult s : results) { try { Thread.sleep(1

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

我正在尝试一次启动128个以上的异步任务,但由于ThreadPoolExecutor而失败。我已经看到了为什么它不起作用的一些答案,但是没有关于如何正确实现它的真正答案

因为我有很多时间上传我的东西,所以我在考虑在开始下一次上传之前先把我的主要活动放在睡眠状态,这似乎不太管用

  for (IrisResult s : results) {
         try {
              Thread.sleep(1000);
              mAzureTableManager.addIrisResult(s);
          } catch (InterruptedException e) {
                    e.printStackTrace();
      }
 }
方法
addirisResult()
实际上通过
受保护的Void doInBackground(Void…params){

我在寻找最简单的解决方案,而不是最好的方法

 yourAsyncTask.executeOnExecutor(yourThreadPoolExecutor, params);
并增加您的池大小:

 yourThreadPoolExecutor.setMaximumPoolSize(size);
设置允许的最大线程数。这将覆盖构造函数中设置的任何值。如果新值小于当前值,则多余的现有线程将在下次空闲时终止


例如:

yourThreadPoolExecutor = Executors.newCachedThreadPool();
yourThreadPoolExecutor.setMaximumPoolSize(256);
yourAsyncTask.executeOnExecutor(yourThreadPoolExecutor, params);
并增加您的池大小:

 yourThreadPoolExecutor.setMaximumPoolSize(size);
设置允许的最大线程数。这将覆盖构造函数中设置的任何值。如果新值小于当前值,则多余的现有线程将在下次空闲时终止


例如:

yourThreadPoolExecutor = Executors.newCachedThreadPool();
yourThreadPoolExecutor.setMaximumPoolSize(256);
yourAsyncTask.executeOnExecutor(yourThreadPoolExecutor, params);

所以我需要实现一个自定义ThreadPoolExecutor?@ataulm我猜它是128,或者CPU计数*2+1;根据这个答案:您只需实例化一个,不必实现任何自定义。单击AsyncTask.execute(对象…)查看如果您未指定要使用的答案,它是否使用默认答案。请使用简单示例编辑答案,但您应该阅读docs@GabeSechan如果确实需要并行执行,可以使用
线程池执行器调用
executeOnExecutor(java.util.concurrent.Executor,Object[])
你需要自己做一些实验,问题得到了回答。仔细阅读,也许我需要实现一个自定义ThreadPoolExecutor?@ataulm我猜它是128,或者CPU计数*2+1;根据这个答案:你可以实例化一个,不必实现任何自定义。点击
AsyncTask.execute(对象…)
查看如果您未指定要使用的答案,它是否使用默认答案。请使用简单示例编辑答案,但您应该阅读docs@GabeSechan如果确实需要并行执行,可以使用
线程池执行器调用
executeOnExecutor(java.util.concurrent.Executor,Object[])
您需要自己做一些实验,问题得到了回答。请仔细阅读,可能@Gabetechan“AsyncTasks all run on one thread”不正确。请阅读。@Gabetechan我发布了一个链接,上面说您可以指定自Honeycom以来的并行执行。我是否误解了官方文档?@Gabetechan“AsyncTasks all run on one thread”不正确。请阅读。@Gabetechan我发布了一个链接,上面说您可以指定自蜂巢以来的并行执行。我是否误解了官方文档?