簡體   English   中英

如何在android服務中處理保持活動連接

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM