[英]how to handle keep alive connection in android Service
我正在使用asmack作為一個Android IM應用程序,我正在使用AIDL接口的遠程服務。
在我的服務的onStartCommand
方法內部,我編寫如下代碼。 我創建連接,然后使用它登錄。 當任何人在我的應用程序的主要活動的onCreate
方法中運行我的應用程序時,運行我的服務getApplicationContext.StartService(serviceIntent)
。 它運行正常,但是幾分鍾后(有時10分鍾,有時超過10個)我在服務內部附加的messageListener
停止接收消息。 但我知道連接存在,因為同時我使用xmppConnection
發送消息,它向用戶B發送消息,但它沒有收聽來自用戶B的消息。我不知道為什么我的聽眾停止聽到消息。
public int onStartCommand(final Intent intent, final int flags, final int startId) {
ConnectionConfiguration config = new ConnectionConfiguration(URL, MyPort, Host);
xmppConnection = new XMPPConnection(config);
xmppConnection.connect();
xmppConnection.login("someid@sample.com", "testpass");
xmppConnection.addPacketListener(myMessageListener, new PacketTypeFilter(Message.class));
return START_STICKY;
}
private PacketListener myMessageListener = new PacketListener() {
public void processPacket(Packet packet) {
Message msg = (Message) packet;
}
}
請指導。
如果沒有您注意到,您的連接是否因錯誤而關閉? 您應該為每個回調添加連接偵聽器和日志以調試連接狀態。
在Android上可以有一個“僵屍”插槽:你仍然可以寫入它,但收件人永遠不會收到消息,當然你將無法從中讀取新消息。 它可能在網絡狀態發生變化后發生。
檢測我是否使用XMPP Ping ,從客戶端發出警報(每15分鍾不重復一次)。 我禁用白色空間保持活力。 這會破壞客戶端和服務器(NAT或代理服務器)之間可能存在的大多數超時機制。 另外,如果您沒有收到ping的任何答案(例如20秒內),您可以假設連接處於錯誤狀態並手動重新連接。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.