如何在应用程序中保持XMPP连接活动?

Raj*_*ddy 3 connection service android xmpp keep-alive

我目前正在使用asmack lib连接到XMPP服务器的应用程序.该应用程序主要包括发送/接收消息,更改状态等.

目前,XMPP连接存在于应用程序内部,而不是某种后台服务.所以现在我想知道,使用服务保持连接是否更好或者只是在我的应用程序实际运行时保持连接处于活动状态.

这是考虑到我希望在我的应用程序运行后台以及用户返回任何具有XMPP连接的活动时始终保持与XMPP服务器的连接.我确实喜欢这个,如果它涉及主要活动(意味着我连接凭证)重新连接XMPP连接与相同的凭据.但我面临的问题是,当我在联系人视图中停留一段时间后,连接在一段时间后会被关闭,如果该活动恢复到连接时取消预告(即空指针异常).这里是不可能重新连接连接.

所以在某种程度上,我问一下,当我的Activity被带到前台/开始时,(重新)连接/登录是否更好,或者最好在服务内部连接一次并保持这个连接活着?

如果服务创建是更好的方法,如何创建片段以及如何创建XMPP连接,我必须使用按钮进行登录和注销.如何在服务中维护这些选项.

提前致谢,

iTe*_*ech 6

如果您希望始终连接到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;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)