单例或服务用于套接字连接

M t*_*e K 1 service android websocket

我是Android开发的新手,我正在尝试将IOS应用移植到Android.基本上我的应用程序需要使用套接字IO实时与服务器通信.它连接到服务器,然后处理各种消息,直到服务器完成处理请求.

在我的IOS应用程序中,我使用Singleton模式将请求发送到我的websocket服务器,并使用相同的实例来委派服务器响应.在Android中,我将使用相同的模式,在我的活动中使用回调对象在获得服务器响应后重定向用户.

我需要我的应用程序保持套接字连接打开,直到我们从服务器获得正确的状态,即使应用程序进入后台.

有些人建议使用Service with Broadcast接收器而不是Singleton.在我的情况下,这是最好的事情吗?

Tre*_*vor 10

使用a Service正是我为非常相似的目的所做的事情(为蓝牙和TCP/IP应用程序进行套接字通信),并认为Service如果用户关闭应用程序时通信应该继续,你肯定想要使用a .

A Service本质上是一种在UI线程上运行代码的方法(当然,您可以在其中启动其他线程),但是没有用户界面,与Activity具有与之关联的UI 不同.

如果您尝试在静态单例类中尝试这样做,因为您建议作为替代方案,那么我认为问题在于您将无法很好地控制它的生命周期.如果用户导航离开应用程序,那么我的理解是,当它选择删除进程和所有静态对象时,它取决于框架.出于这个原因,如果您使用数据填充单例类并退出应用程序然后再返回应用程序,您可能会或可能不会发现"旧"单例实例仍然存在.出于这个原因,在我的应用程序(使用了大量的全局状态)中,我已经在.Application类的扩展中使用了我的单例的实际实例,以(希望)更好地控制它们的生命周期.

有了Service你有合适的生命周期回调(定义良好的生命周期onCreate(),onDestroy()等等),就像你有做Activity.

  • 好的,如果弄清楚如何在我的服务和我的活动之间进行双向沟通.我需要使用IBinder从我的Activity调用服务,我需要使用BroadcastReceiver来获取服务器结果我的活动,希望它可以帮助某人. (2认同)