У меня есть приложение, которое выполняет нетривиальную загрузку миниатюрных изображений и других ресурсов из удаленной службы.
Я использую один экземпляр DefaultHttpClient и пользовательский класс, который я написал, который планирует все мои загрузки. Все загрузки выполняются последовательно в фоновых потоках через AsyncTask. Я не запускаю процедуру загрузки до тех пор, пока в AsyncTask не будет запущено onPostExecute.
Это часто работает отлично. Если я поставлю в очередь 20 изображений, мой планировщик справится со своими задачами. Однако я сталкиваюсь со случаями, когда процедура просто останавливается в точке вызова client.execute (где client - это мой экземпляр DefaultHttpClient). Я могу необъяснимым образом реанимировать этот процесс, перемещаясь по приложению и выполняя случайные действия (прокрутка списка, перемещение назад и вперед между действиями и т. Д.). Как будто что-то, что я делаю, посылает сообщение "проснуться" потоку, который остановился или заблокирован.
Я добавил несносное количество журналов во все движущиеся части моего приложения, чтобы посмотреть, не вызывает ли что-то внешнее этой процедуры какое-либо состояние тупика. Я просматриваю LogCat по pid, чтобы увидеть, происходит ли что-то еще в моем процессе в момент остановки или возобновления, и я не вижу ничего необычного. Самое странное в этом то, что я могу повторять точное условие снова и снова.
FWIW, я установил таймауты сокетов и тайм-ауты соединения как для экземпляра HttpClient, так и для экземпляра HttpGet, который я передаю методу execute. Это не приводит к тому, что метод execute возвращает рано или выбрасывает исключение или что-либо подобное. Когда процедура «возвращается обратно», HttpClient.execute возвращает допустимый HttpResponse, и все работает как обычно.
Любые идеи о том, что я могу отладить, чтобы выяснить, где это происходит? Я признаю, что это очень специфическое условие, но Существуют ли какие-либо продвинутые методы для специальной отладки трафика DefaultHttpClient или http в Android в целом?
спасибо!