2015-11-24 81 views
0

我一直在使用Smack XMPP Android庫爲聊天應用程序。Android Smack Xmpp連接處理最佳做法

我聊天當前架構,我用XMPP發送消息客戶只有當應用程序在前景以其它方式使用GCM。服務器已經正確處理。

由於android沒有方法來簡單地指出應用程序當前位於FG或BG的哪個位置,因此我發現難以連接和斷開XMPP。所以我實現了在每個活動上使用計時器onPauseonResume當應用程序有多個activities.This是非常痛苦和更多的工作要做。

對於例如,我有兩個活動,甲乙 .Connect XMPP在的onResume()的 .Switch從的onPause()將觸發A並在3秒後斷開XMPP連接。在3秒內,onResume()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

你不應該手動斷開客戶端,只需切換到GCM當客戶端從服務器斷開,並切換回當客戶再次連接XMPP,所有的邏輯應該是在服務器端

+0

首先服務器不是由我維護的。其次如何讓服務器知道客戶端是否斷開連接?現在有新的通知要發送,服務器檢查客戶端是脫機(斷開XMPP)還是聯機(XMPP連接)。該服務器上的base將使用GCM脫機並使用XMPP,否則 – Sanny

+0

服務器「知道」每個連接的客戶端和您應該在每次從服務器斷開連接時觸發切換到gcm,即使它不清楚(不發送「斷開」狀態),只是因爲用戶可能隨時丟失連接 – vitalyster

+0

感謝回覆@vitalyster。有人說,當我切換到GCM從客戶端? – Sanny

0

最好的辦法是你應該使用片段代替活動。如果你使用片段,那麼你將只有1個Activity,你的onPause()和onResume()處理將非常簡單。試一試....片段比活動更快。