繁体   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