我在代码中的某个位置,在那里我只有非常有限的权限,但必须将数据发送到外部的android应用程序。(安卓系统C代码)显然,我不能在那里启动绑定服务,但我可以连接到已经运行的服务。因此,我的实现每秒都会检查服务是否可用,如果可用,则连接并开始发送数据。这很好用。
我的问题如下。如果我终止服务二进制/进程,客户端不知何故看不到该服务不再可用。有没有办法删除我使用addService(...)
添加的服务?客户端执行getService()
。
我可以通过定期在客户端再次执行getService()来解决问题。像这样,如果服务消失,他们不会立即看到,但他们会在某个时候得到它。像这样,如果服务再次可用,他们可以重新连接。
我找不到任何可以"删除"该服务的内容。但这种变通方法效果很好。
没有API可以删除服务句柄,尽管当服务终止时,服务管理器将使用svcinfo_death()
释放句柄。本地服务管理器中唯一有效的传入事务代码是SVC_MGR_GET_SERVICE
、SVC_MGR_CHECK_SERVICE
、SVC_MGR_ADD_SERVICE
和SVC_MGR_LIST_SERVICES
(请参阅service_manager.c)
也就是说,您可能会发现,将此解决方案应用于您的问题可以更高效、更可靠地决定是否需要再次调用getService()
。