У меня есть AsyncTask, который содержит следующий doInBackground()
метод:`while` петля внутри AsyncTask повторение
protected Boolean doInBackground(String... StringUrls) {
// ...
while (len != -1) {
bufOutstream.write(buffer, 0, len);
len = in.read(buffer);
if (Recorder.this.isCancelled) {
Recorder.this.stopSelf();
break;
}
}
bufOutstream.close();
} catch (IOException e) {
System.err.println("Caught IOException: " + e.getMessage());
}
return true;
}
я хотел бы сделать следующее:
- Когда цикл
while
делается (потому чтоlen == -1
) Я хотел бы подождать 1 секунду, а затем повторить попытку, так что еслиlen
изменится наlen != -1
, он будет снова зациклен. - Эта попытка повторения должна быть выполнена до 5 раз (когда
len == -1
), когдаlen != -1
повторная попытка должна быть остановлена.
Спасибо. Не могли бы вы также сказать, что делать, когда вызывается «IOException» (из-за разъединения)? Это прерывает ваш цикл. – Kristopher
Это зависит от вас. Вы можете просто проигнорировать его и повторить запрос (5 раз), но иногда требуется некоторое время до того, как будет сброшено IOException. Особенно в случаях «SocketTimeoutException». Другой вариант - повторить 1 или 2 раза вместо 5, когда возникает исключение. Вы также можете попытаться реализовать какое-то экспоненциальное отключение или даже немедленно прервать задачу. Это зависит от того, насколько важны данные для вашего приложения. – stan0