3

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

目前,XMPP 连接位于应用程序内部,而不是某种后台服务。所以现在我想知道,是使用服务保持连接活动还是在我的应用程序实际运行时保持连接活动更好。

这是考虑到当我的应用程序在后台运行以及用户返回任何具有 XMPP 连接的活动时,我希望始终保持与 XMPP 服务器的连接。我确实喜欢这样做,如果涉及到主要活动(意味着我使用凭据连接的位置)使用相同的凭据重新连接 XMPP 连接。但我面临的问题是,当我在联系人视图中停留一段时间时,如果该活动恢复在连接处获得取消赎回权(即空指针异常),连接将在一段时间后关闭。在这里无法重新连接联系。

因此,在某种程度上,我问是否最好在我的活动被带到前台/启动后立即(重新)连接/登录,或者最好在服务中连接一次并保持此连接处于活动状态?

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

提前致谢,

4

1 回答 1

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;
        }
    }
}
于 2013-02-11T07:22:30.063 回答