我正在开展一个项目。它将使用服务中的tcp套接字连接到远程主机。并与之交互以获取和发送数据。
我计划的流程是;
单例套接字类。返回连接套接字引用;
要求用户提供远程服务器的IP和端口的活动。 服务使用ip:port参数触发( intent )服务。 service将使用singleton socket类获取套接字。 然后服务将读取数据;在新的操作窗口中解析它并向用户显示用户操作(预期)。 用户完成动作后;结果将被发送到服务器。并将阅读新的请求。
问题/查询在这里;
当您返回服务进行第二次数据读取操作时;套接字会在那里吗? (或收集垃圾) 因为数据读取操作开始后没有接受新的连接。
调用用户操作活动后,第一个服务是否会消失?
如果我使用活动中的startService,创建的新服务或之前再次调用的现有服务调用服务会发生什么?
我怎么能让服务永远存在,除非我说它会死。
抱歉,如果我问愚蠢的问题。
答案 0 :(得分:2)
以下是我的看法:
当你回到服务进行第二次数据读取操作时;将 插座在那儿? (或收集垃圾)因为数据读后 操作开始没有接受新连接。
如果对象是静态的并且套接字是成员变量,它很可能就在那里,你应该在单一模式中有保护措施来屏蔽这个问题(if single==null){...}
,你也可以尝试通过覆盖它来管理它Application
类并在其中添加工厂方法。您需要确保套接字正确打开和关闭,而不是只是悬挂,因为这可能会产生问题
编辑:
实际套接字是否仍然打开将取决于套接字的超时
在调用用户操作活动后,第一个服务会死吗?
需要告知服务停止,因此不会死亡
如果我使用startService从服务器调用该服务会发生什么 活动,创建的新服务或现有的服务 再次回电话?
如果服务正在运行,它将不会创建另一个服务,它将调用正在运行的服务的onStartCommand()
除非我说要死,否则我怎么能让服务永远存在。
这是默认行为