服务和操作之间的Android单例

服务和操作之间的Android单例,android,android-intent,android-service,android-activity,Android,Android Intent,Android Service,Android Activity,我正在做一个项目。它将使用服务中的tcp套接字连接到远程主机。并与之交互以获取和发送数据 我计划的流程是 单例套接字类。返回连接的套接字引用 向用户请求远程服务器的ip和端口的活动。 由活动使用ip:port参数触发的服务(intent)。 服务将使用singleton套接字类获取套接字。 然后服务将读取一个数据;解析它并在新的操作窗口(预期的)中为用户操作显示用户。 用户完成操作后;结果将被发送到服务器。新的请求将被读取 这里有问题/疑问 当您返回服务进行第二次数据读取操作时;插座在那儿吗?

我正在做一个项目。它将使用服务中的tcp套接字连接到远程主机。并与之交互以获取和发送数据

我计划的流程是

单例套接字类。返回连接的套接字引用

向用户请求远程服务器的ip和端口的活动。 由活动使用ip:port参数触发的服务(intent)。 服务将使用singleton套接字类获取套接字。 然后服务将读取一个数据;解析它并在新的操作窗口(预期的)中为用户操作显示用户。 用户完成操作后;结果将被发送到服务器。新的请求将被读取

这里有问题/疑问

  • 当您返回服务进行第二次数据读取操作时;插座在那儿吗?(或收集垃圾) 因为在数据读取操作开始后,没有接受新连接

  • 调用用户操作活动后,第一个服务是否会终止

  • 如果我使用startService从活动、创建的新服务或重新调用启动前的现有服务调用该服务,会发生什么情况

  • 我怎么能让这项服务永远存在,除非我让它死去

抱歉,如果我问了一些愚蠢的问题。

以下是我的看法:

当您返回服务进行第二次数据读取操作时;将 插座在那儿吗?(或垃圾收集)因为在读取数据之后 操作已启动,未接受新连接

如果对象是静态的,并且将套接字作为成员变量,那么它很可能存在,您应该在单个模式中设置保护措施,以避免出现此问题
(如果single==null){…}
,您还可以尝试通过重写
应用程序
类并在其中添加工厂方法来管理它。您需要确保插座正确打开和关闭,而不是挂起,因为这可能会造成问题

编辑:

实际套接字是否仍然打开取决于套接字的超时时间

调用用户操作活动后,第一个服务是否会终止

服务需要被告知停止,这样它就不会消亡

如果我使用startService从 活动,创建的新服务或启动服务之前的现有服务 又打回来了

如果服务正在运行,则不会创建另一个服务,它将调用正在运行的服务的
onStartCommand()

我怎么能让这项服务永远存在,除非我让它死去


这是默认行为

为什么要使用服务?您考虑过使用AsyncTask吗?遗憾的是,这是我的分配项目,我必须使用服务。我已经在使用您建议的空检查单例用法。我的错误是没有从开发者页面上阅读服务页面。部分:服务生命周期谢谢,我会尽快尝试设置答案!!没问题,仍然是一个合理的问题,如果答案是正确的,请将其标记为正确。