簡體   English   中英

如何在應用程序中保持XMPP連接活動?

[英]How to keep XMPP connection alive in the App?

我目前正在使用asmack lib連接到XMPP服務器的應用程序。 該應用程序主要包括發送/接收消息,更改狀態等。

目前,XMPP連接存在於應用程序內部,而不是某種后台服務。 所以現在我想知道,使用服務保持連接是否更好或者只是在我的應用程序實際運行時保持連接處於活動狀態。

這是考慮到我希望在我的應用程序運行后台以及用戶返回任何具有XMPP連接的活動時始終保持與XMPP服務器的連接。 我確實喜歡這個,如果它涉及主要活動(意味着我連接憑證)重新連接XMPP連接與相同的憑據。 但我面臨的問題是,當我在聯系人視圖中停留一段時間后,連接在一段時間后會被關閉,如果該活動恢復到連接時取消預告(即空指針異常)。這里是不可能重新連接連接。

所以在某種程度上,我問一下,當我的Activity被帶到前台/開始時,(重新)連接/登錄是否更好,或者最好在服務內部連接一次並保持這個連接活着?

如果服務創建是更好的方法,如何創建片段以及如何創建XMPP連接,我必須使用按鈕進行登錄和注銷。如何在服務中維護這些選項。

提前致謝,

如果您希望始終連接到XMPP服務器,那么Service就是您的選擇。

因此,一旦用戶登錄,您就可以啟動通信service並使其保持運行,並在用戶注銷時停止service

您可以顯示來自您的service通知,該通知會在單擊時打開該活動。

如果您在服務和活動之間進行簡單的通信(例如傳遞少量命令),則可以使用LocalBroadcastManager執行此操作,但如果您的通信更復雜(例如,活動偵聽服務中的事件),請考慮創建一個使用的service binder器。 activity

這是支持bind的服務的示例框架

public class MyService extends Service {
    private final IBinder binder = new ServiceBinder();

   @Override
   public int onStartCommand(Intent intent, int flags, int startId) {
      onHandleIntent(intent);
      return START_STICKY;
   }

   protected void onHandleIntent(Intent intent) {
       // handle intents passed using startService()
   }

   @Override
   public IBinder onBind(Intent intent) {
    return binder;
   }

   public class ServiceBinder extends Binder {
        MyService getService() {
            return MyService.this;
        }
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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