2014-09-28 162 views
6

在互聯網上搜索了很多之後,我們爲了確保堅持連接與XMPP服務器,我們必須創建一個服務來得到一個結論,如何在Android中創建服務與XMPP服務器保持Xmpp連接?

我們已經創建了一個它使用的Smack庫與連接XMPP服務器,它與移動和Wi - Fi網絡正常工作。

你想讓它的設計方法總是事!每一次,啪有這種重聯機制已經在那裏庫隱含實現這聽的連接,如果連接斷開啪嘗試一些時間間隔與XMPP服務器重新連接。

我們的使用情形::
互聯網連接可能是因爲WiFi或數據網絡,在這裏如果連接走的是一個人的空閒狀態關閉屏幕CPU進入睡眠狀態,此時任何的數據發送到服務器此連接上有將沒有響應,因爲服務器不再監聽客戶端,在客戶端XMPP連接已處於連接模式連接監聽器未檢測到與服務器的任何斷開連接,因此此處流程完成。

在INTERNET上搜索後,我們發現解決這個問題的可能的解決方案是在修復後(我們使用1分鐘作爲修復期)ping服務器,在檢測到ping失敗後,我們實現了與smack相同的重新連接機制來自Smack重新連接機制本身)通過使用計時器任務。

問題::我們的唯一問題是電池耗盡,如果用戶仍然與INTERNET連接並且重新連接間隔時間增加,則會消耗電池電量。

1)。上述問題的可能解決方案是什麼? 2)。我們是否應該採取另一種方法?

回答

6

如何在Android中創建服務,使其持續Xmpp連接 使用XMPP服務器?

兩件事情

  1. 重新建立連接,通過監聽CONNECTIVITY_CHANGED意圖並確定當前使用的數據連接去了(被另一取代)。
  2. 確保連接是通過ping服務器約

    備註建立監聽CONNECTIVY_CHANGED是不夠的,你需要比較現在的活動一個以前的活動連接。如果不一樣,請重新建立XMPP連接。

  3. Smack 4.1自帶ServerPingWithAlarmManager,它將根據PingManager 的設置每隔30分鐘檢查一次ping是否需要。這個值是硬編碼的,不能改變。

使用1分鐘作爲Ping間隔是多麼的方便!正如你所經歷的那樣,它會很快耗盡你的電池。合理的ping時間間隔大於15分鐘,我建議30分鐘。 Smack 4.1還將確保只有在Ping時間間隔沒有收到節的情況下才發送ping。

如果可能,還可以使用XEP-0198:流管理。

我建議您查看遵循這些指南的各種開放源代碼應用程序,並實現穩定,永久的連接,而不會耗盡用戶電池的電量。。

1:只是遵循這些建議不能保證電池耗盡。有更多的因素需要考慮。

+1

謝謝你的流程,我總是發現你的答案有所不同,因爲我們使用的是ejabberd 2.1.11 XEP-0198不包含在其中,是的,因爲你建議我將ping間隔增加到15分鐘電池耗盡問題幾乎得到解決,但我現在已經和數據網絡連接問題妥協了,由於客戶端已經掛斷了連接(因爲數據網絡很慢),服務器不知道[我們已經在1分鐘的時間間隔內設置了服務器ping,如果服務器在32秒後發現沒有回覆它殺死連接]在這裏,我們有1分鐘的黑暗窗口,其中的消息正在丟失 – Dev 2014-10-01 08:00:35

+1

你可以建議我任何解決方案嗎?在這裏,我們要確保沒有聊天消息丟失! – Dev 2014-10-01 08:00:52