我目前正在开发一个使用asmack lib连接到XMPP服务器的应用程序。此应用程序主要包括发送/接收消息,更改状态等。
目前,XMPP连接存在于应用程序内部,而不是某种后台服务。所以现在我想知道,最好是使用服务保持连接活着,或者只是在我的应用程序实际运行时保持连接处于活动状态。
这是考虑到我希望在我的应用程序运行后台以及用户返回任何具有XMPP连接的活动时始终保持与XMPP服务器的连接。我确实喜欢这个,如果它涉及主要活动(意味着我连接凭证)重新连接XMPP连接与相同的凭据。但我面临的问题是,当我在联系人视图中停留一段时间后,连接在一段时间后会被关闭,如果该活动恢复到连接时取消预告(即空指针异常)。这里是不可能重新连接连接。
所以在某种程度上我问,一旦我的Activity被带到前台/开始,(重新)连接/登录是否更好,或者最好在服务内部连接一次并保持这种连接活?
如果服务创建是更好的方法,如何创建片段以及如何创建XMPP连接,我必须使用按钮登录和注销。如何维护这些选项。
提前致谢,
答案 0 :(得分: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;
}
}
}