如何停止在线程池执行器Android中运行的任务

ydn*_*nas 1 multithreading android threadpool threadpoolexecutor

我的项目中有一个异步任务,如下所示.

@SuppressLint("NewApi")

private void callTask() {

    new Task() {

      @Override
      protected void doInBackground(String... params) {

      }
     }.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR,
                string1,string2 );
   }
Run Code Online (Sandbox Code Playgroud)

我在for循环中调用这个callTask​​()方法10次​​.

我的任务平行执行,工作正常.我想在一个时间点停止所有任务.我怎样才能做到这一点?

San*_*ndy 6

您需要将每个任务(异步任务)的实例保存在ArrayList或任何其他结构中,并将Task对象添加到它

请检查以下代码:

private ArrayList<Task> array_task = new ArrayList<Task>();
private void callTask() {

Task task = new Task() {

  @Override
  protected void doInBackground(String... params) {

  }
 }.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR,
            string1,string2 );
array_task.add(task);

 }
Run Code Online (Sandbox Code Playgroud)

在您想要取消所有任务之后,您需要再次循环取消所有检查以下代码

@Override
    public void onClick(View v) {
        switch (v.getId()) {
        case R.id.cancel_all_task:
            callCancel_AllAsyncTask();
            break;

        }

    }

private void callCancel_AllAsyncTask()
{
     for(int i=0;i<array_task.size();i++)
     {
       array_task.get(i).cancel(true);
     }
}
Run Code Online (Sandbox Code Playgroud)