#android
#Android
Вопрос:
Я разрабатываю приложение, в котором я поддерживал бесконечное соединение сокета с сервером. Он работает довольно хорошо все время, за исключением случаев, когда устройство остается в режиме ожидания дольше, скажем, 30 минут или около того. Через 30 минут, если я переведу устройство в состояние пробуждения и попытаюсь связаться с сервером через мое приложение, оно не выдает никаких исключений. Это показывает мне, что мое соединение с сокетом все еще находится в рабочем состоянии. Но когда я проверяю на стороне сервера, те же данные здесь не поступают. Итак, я не могу понять, есть ли известная проблема на стороне Android или я делаю здесь что-то не так. Ниже приведен фрагмент кода, который я использую для настройки сокета.
Socket socket = new Socket(url, port);
String request = "some request";
outputStream = socket.getOutputStream();
outputStream.write(request.getBytes());
outputStream.flush();
InputStream is = socket.getInputStream();
while (true) {
StringBuffer sb = new StringBuffer();
int ch = is.read();
while (ch != -1) {
sb.append((char) ch);
ch = is.read();
}
}
Ответ №1:
Вам необходимо отправить сообщения на уровне приложения, чтобы поддерживать соединение с вашим сокетом. Вот пример:http://devtcg.blogspot.com/2009/01/push-services-implementing-persistent.html
Ответ №2:
Хотя это и не дает прямого ответа на ваш вопрос, но я бы рекомендовал вам использовать apache HTTP client api для управления постоянными соединениями.
Вот ссылка на их руководство, в частности, на сохранение соединения.