Я разрабатываю приложение чата, в котором
- У меня постоянно работает фоновый сервис.
- Приложение работает бесперебойно, и я могу получать и отправлять сообщения без каких-либо проблем.
- Я использую диспетчер пересоединения по умолчанию Smack 4.1, который подключается, как только соединение будет потеряно (почти 90% времени).
Но иногда, когда соединение потеряно, диспетчер подключений Smack перестает работать.
Я не смог выяснить, что вызывает эту проблему.
Когда я проверяю свой телефон, после задержки от 12 до 14 часов, я вижу, что служба Android по-прежнему работает, но повторное соединение XMPP перестало работать. Затем я должен принудительно остановить приложение, чтобы затем перезапустить службу и снова подключиться к серверу XMPP.
Мое предположение - это то, что происходит, когда "Телефонная сеть переключается с Wifi-to-Data или Data-to-Wifi" . В то же время диспетчер подключений Smack 4.1 перестает работать. Хотя, я не уверен в этом.
И у меня есть вопросы
- Что такое PingManager? Может ли PingManager быть полезным в этом случае?
- Что такое StreamManagement? Как я могу включить его? Полезно ли в этом случае?
Любые другие решения для решения этой проблемы? Я думаю о следующих решениях:
- Чтобы использовать GCM также с XMPP, поэтому, когда XMPP не удалось подключиться, я могу получить PUSH и снова подключиться на основе PUSH.
- Использовать службы будильника. ( ПРОБЛЕМА: Сообщения, которые были в очереди из-за потерянного соединения, будут зависеть от следующего расписания аварий)
- Каждый раз подключайте XMPP, когда пользователь возвращается в приложение. ( ПРОБЛЕМА: Сообщения, которые были в очереди из-за потерянного соединения, будут зависеть от возврата пользователя в приложение)