服务和操作之间的Android单例

时间:2011-12-13 14:23:04

标签: android android-intent android-service android-activity

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

我计划的流程是;

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

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

问题/查询在这里;

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

  • 调用用户操作活动后,第一个服务是否会消失?

  • 如果我使用活动中的startService,创建的新服务或之前再次调用的现有服务调用服务会发生什么?

  • 我怎么能让服务永远存在,除非我说它会死。

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

1 个答案:

答案 0 :(得分:2)

以下是我的看法:

  

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

如果对象是静态的并且套接字是成员变量,它很可能就在那里,你应该在单一模式中有保护措施来屏蔽这个问题(if single==null){...},你也可以尝试通过覆盖它来管理它Application类并在其中添加工厂方法。您需要确保套接字正确打开和关闭,而不是只是悬挂,因为这可能会产生问题

编辑:

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

  

在调用用户操作活动后,第一个服务会死吗?

需要告知服务停止,因此不会死亡

  

如果我使用startService从服务器调用该服务会发生什么   活动,创建的新服务或现有的服务   再次回电话?

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

  

除非我说要死,否则我怎么能让服务永远存在。

这是默认行为