Как остановить выполнение задачи в исполнителе пула потоков Android

У меня есть асинхронная задача в моем проекте, как показано ниже.

@SuppressLint("NewApi")

private void callTask() {

    new Task() {

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

      }
     }.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR,
                string1,string2 );
   }

и я вызываю этот метод callTask() внутри цикла for 10 раз.

Мои задачи выполняются параллельно, и все работает нормально. Я хочу остановить все задачи в один момент времени. Как я могу этого добиться?


person ydnas    schedule 29.04.2014    source источник
comment
Я видел несколько связанных сообщений. Не отменяется и Идеальный способ отменить асинтаск   -  person UrielUVD    schedule 29.04.2014


Ответы (1)


Вам необходимо сохранить экземпляр каждой задачи (асинхронной задачи) в 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);
}

И после того, как вы хотите отменить все задачи, вам снова понадобится цикл for, чтобы отменить все проверки следующего кода.

@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);
    }
}
person Sandy    schedule 29.04.2014