2

Я довольно новичок в разработке Java и Android. Я посмотрел на код AsyncTask и увидел класс бросает 3 Исключения:Почему TimeoutException не нужно улавливать при выполнении AsyncTask?

  • InterruptedException
  • ExecutionException
  • TimeoutException

Когда я запускаю метод выполнения на AsyncTask объекта, почему что компилятор жалуется, если я не поймаю InterruptedException и ExecutionException, но не жалуюсь на TimeoutException?

В целом, как мы узнаем, какие исключения необходимо поймать? (Разумеется, я смотрю на ошибки компилятора и записываю недостающие блоки catch, но я хотел бы понять, что за ним стоит руководитель).

спасибо!

Example code: 
public void test() { 
    AsyncTask at = new AsyncTask() { 
     @Override 
     protected Object doInBackground(Object[] params) { 
      return null; 
     } 
    }; 

    Object o; 
    try { 
     o = at.execute().get(); 
    } catch (InterruptedException e) { 
     e.printStackTrace(); 
    } catch (ExecutionException e) { 
     e.printStackTrace(); 
    } 

} 

Edit: я проверил, что TimeoutException является проверяемым исключение (которое должно быть пойманы). Однако @NicolasFilotto уже ответил на мой вопрос. Спасибо вам всем.

+0

Я проверил, что TimeoutException является проверенным исключением. Однако @NicolasFilotto уже ответил на мой вопрос. Спасибо вам всем. –

ответ

1

Метод get() бросает только InterruptedException, ExecutionException и CancellationException, поэтому вам не нужно, чтобы поймать TimeoutException в вашем случае, только метод get(long timeout, java.util.concurrent.TimeUnit unit) бросает 3 исключения, перечисленные выше, и CancellationException, который является аналогом get(), но с тайм-аут.

NB:CancellationException - это неконтролируемое исключение, поэтому его не нужно захватывать.

+1

Спасибо, что указали, что вне @NicolasFilotto это было полезно для вас :) –

+1

Yup it отвечает на мой вопрос, спасибо! –