Этот вопрос является частью моего предыдущего вопроса, который до сих пор остается без ответа. Здесь вы можете увидеть это. 24-часовое соединение Android-приложения с PHP веб-сервером.
Я использую HttpURLConnection для загрузки текста с веб-страницы PHP. Приложение использует сервис для выполнения AsyncTask через равные промежутки времени. Я замечаю, что если мобильные WiFi подключаются к маршрутизатору, у которого нет интернета, то иногда (не всегда) приложение ведет себя так, что пытается подключиться к интернету без какого-либо эффекта времени ожидания соединения, установленного при подключении к веб-странице. Даже если интернет начинает приходить снова, приложение ничего не делает и продолжает пытаться подключиться к интернету.
Такое поведение также может быть проверкой Эмулятора несколькими способами. Сначала просто включите WLAN, подождите 30 минут и снова подключитесь. Вы увидите, что HttpURLConnection будет пытаться подключиться к Интернету, никогда не сдается и никогда не будет подключен к Интернету. Если мы перейдем в спящий режим Windows и запустим его снова, то можно наблюдать такое же поведение. Но это не происходило все время.
Я думаю, что есть какая-то проблема с моим методом использования HttpURLConnection, а не с моим Сервисом. Пожалуйста, помогите мне в этой ситуации. Вот мой исходный код.
class DownloadInfo extends AsyncTask<String, String, String> {
@Override
protected String doInBackground(String... url) {
// constants
try {
System.setProperty("http.keepAlive", "false"); // also checked without this line.
HttpURLConnection connection = (HttpURLConnection) new URL(url[0]).openConnection();
connection.setDoOutput(true);
connection.setConnectTimeout(30000); // miliseconds
connection.setRequestMethod("POST");
connection.setRequestProperty("Connection", "Keep-Alive"); // also checked with "Connection", "Close"connection.setRequestProperty("Charset", "UTF-8");
connection.setRequestProperty("Content-Type",
"application/x-www-form-urlencoded;charset=" + "UTF-8");
Uri.Builder builder = new Uri.Builder()
.appendQueryParameter("user", "1111")
.appendQueryParameter("pass", "1111");
String query = builder.build().getEncodedQuery();
OutputStream os = connection.getOutputStream();
BufferedWriter writer = new BufferedWriter(
new OutputStreamWriter(os, "UTF-8"));
writer.write(query);
writer.flush();
writer.close();
os.close();
InputStream is = connection.getInputStream();
BufferedReader rd = new BufferedReader(new InputStreamReader(is));
StringBuffer response = new StringBuffer();
String line = "";
while((line = rd.readLine()) != null) {
response.append(line);
response.append('\r');
}
rd.close();
// also tried is.close(); AND connection.disconnect();
line = response.toString();
return line;
} catch (Exception e) {
Log.w("MyApp", "Download Exception : " + e.toString());
}
return null;
}
@Override
protected void onPostExecute(String result) {
if (result != null) {
}
}
Задача ещё не решена.
Других решений пока нет …