2015-11-24 2 views
0

Я использую Смак XMPP андроида библиотека для чата приложений.Android Смак XMPP погрузо соединение передовой практики

Моя текущая архитектура для чата это, я использую XMPP отправить сообщения к клиенту, только если приложение находится в переднего плана иначе использовать GCM. Сервер уже обработан правильно.

Поскольку у android нет способа просто указать, где приложение в настоящее время находится в FG или BG, я нахожу сложным подключение и отключение XMPP. Таким образом, я реализовал использование таймера при каждом действии onPause и onResume, когда приложение имеет более одного вида деятельности. Это очень больно и много работы.

Для, например, у меня есть два вида деятельности, A и B .Подайте XMPP в onResume() из .Включить от к B, OnPause() запустит на A и отключите соединение XMPP после 3 секунд. В течение 3 секунд, onResume() of B активирует и останавливает таймер, чтобы соединение было живым. :-)

OnPause()

if (Application.getInstance().xmppStatus == XMPPSTATUS.CONNECTED) { 
    Application.getInstance().disconnectXmpp(); //disconnect xmpp after 3sec 
} 

onResume()

if (Application.getInstance().xmppStatus == XMPPSTATUS.DISCONNECTED) { 
    LoginHelper.connectXmpp();//connect XMPP 
} 

Я считаю, что большинство из вас попали в такого рода вопрос особенно в чате, так что я бы очень ценю, чтобы услышать ваши впечатления об этом.

ответ

0

Не следует отключить клиента вручную, просто переключиться на ГКМ, когда клиент отключается от сервера и вернуться к XMPP, когда клиент снова подключен, вся логика должна быть на стороне сервера

+0

Первый сервер не поддерживается мной. Во-вторых, как shd-сервер знает, отключен ли клиент или нет? Пока есть новое уведомление для отправки, сервер проверяет, находится ли клиент в автономном режиме (отключить XMPP) или Интернет (подключен XMPP) .base на этом сервере будет использовать GCM для автономной работы и использовать XMPP, иначе – Sanny

+0

сервер «знает» о каждом подключенном клиенте, а вы должен инициировать переход на gcm при каждом отключении от сервера, даже если это было неясно (без отправки статуса «разъединения»), просто потому, что пользователь может потерять соединение в любое время – vitalyster

+0

спасибо за ответ @vitalyster. сказав, что когда shd i переключается на GCM от клиента? – Sanny

0

Лучше всего вы должны использовать фрагменты вместо деятельности. Если вы используете фрагменты, то у вас будет только 1 активность, и ваши операции onPause() и onResume() будут очень легкими. Попробуйте ... Фрагменты быстрее, чем действия.