Android: Сокет переходит в состояние зомби после длительного нахождения устройства в режиме ожидания

#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 для управления постоянными соединениями.

Вот ссылка на их руководство, в частности, на сохранение соединения.

Сохранение соединения