in imagepipeline/src/main/java/com/facebook/imagepipeline/producers/PriorityNetworkFetcher.java [370:428]
private void delegateFetch(
final PriorityNetworkFetcher.PriorityFetchState<FETCH_STATE> fetchState) {
try {
NetworkFetcher.Callback callbackWrapper =
new NetworkFetcher.Callback() {
@Override
public void onResponse(InputStream response, int responseLength) throws IOException {
final Callback callback = fetchState.callback;
if (callback != null) {
callback.onResponse(response, responseLength);
}
}
@Override
public void onFailure(Throwable throwable) {
if (shouldRetry(
throwable,
fetchState.attemptCount,
maxConnectAttemptCount,
maxAttemptCount,
retryLowPriAll,
retryLowPriUnknownHostException,
retryLowPriConnectionException,
fetchState.getContext().getPriority())) {
retry(fetchState);
return;
}
final boolean shouldRequeue =
maxNumberOfRequeue == INFINITE_REQUEUE
|| fetchState.requeueCount < maxNumberOfRequeue;
if (shouldRequeue
&& !(nonRecoverableExceptionPreventsRequeue
&& throwable instanceof PriorityNetworkFetcher.NonrecoverableException)) {
requeue(fetchState);
} else {
removeFromQueue(fetchState, "FAIL");
final Callback callback = fetchState.callback;
if (callback != null) {
callback.onFailure(throwable);
}
}
}
@Override
public void onCancellation() {
removeFromQueue(fetchState, "CANCEL");
final Callback callback = fetchState.callback;
if (callback != null) {
callback.onCancellation();
}
}
};
fetchState.attemptCount++;
mDelegate.fetch(fetchState.delegatedState, callbackWrapper);
} catch (Exception e) {
removeFromQueue(fetchState, "FAIL");
}
}