#java #android #url #timeout
#java #Android #url #тайм-аут
Вопрос:
Я создаю приложение, которое на заставке загружает данные из файла через URL-адрес в Интернете. В настоящее время это приложение работает, опубликовано и получает отличные отзывы 🙂
Однако я заметил, что на некоторых устройствах (а именно на HTC Desire), когда я создаю URL-адрес, скажем, как:
url = new URL("https://www.blah.com/blah.txt");
URL-адрес будет просто висеть там, а заставка будет загружаться бесконечно. Я попытался поместить это в свой собственный поток и установить тайм-аут, когда это произойдет, но, похоже, он блокирует даже это, поскольку тайм-аут никогда не попадает в функцию ожидания родительского потока.
Теперь, как я уже сказал, это, похоже, только для HTC Desire, поскольку большинство устройств используют мое приложение без сбоев. И это происходит не на каждом HTC Desire с приложением. Устройства, у которых возникают проблемы, похоже, возникают спорадически. Иногда приложение будет работать нормально, иногда оно будет загружаться бесконечно. Когда это происходит, это происходит как на WiFi, так и на 3G. Если пользователь убивает приложение, пока оно бесконечно зависает, а затем снова открывается, оно устраняет проблему и загружается нормально.
У меня здесь нет идей … у кого-нибудь есть? Единственное, что я могу придумать, это попробовать другой конструктор, может быть, такой:
url = new URL("https", "www.blah.com", 443, "/blah.txt");
но я не слишком разбираюсь в сети, и мне трудно определить другие порты, которые можно использовать. Сайт, который я использую, является сайтом «https».
Заранее благодарим вас за помощь.
Комментарии:
1. Они работают через какой-то прокси? Каков ваш размер выборки? Вы видели, как это происходит на 1 телефоне HTC Desire или 20?
Ответ №1:
Вы можете установить тайм-аут соединения с setConnectTimeout()
помощью on URLConnection
объекта. Это позволит вам перехватить SocketTimeoutException
и либо повторить попытку, либо сделать что-то еще.