取消绑定后,远程服务仍在运行,即使绑定的应用程序也停止服务

时间:2018-05-08 17:13:21

标签: android service bind

我有一个带有服务的Android库,我使用AIDL实现。我想要一个单独的实例,跨应用程序与其他应用程序一起使用。所以我有一个基本应用程序与服务,我设法使其他应用程序的库使用相同的实例。

当我使用该服务关闭所有应用程序时出现问题,因为对于每个应用程序,on destroy都会从服务中取消绑定,但服务仍在运行。

另外,我只是通过绑定而不是通过startService()来使用服务。

我通过android studio检查了关闭应用程序后服务正在运行,而我在服务上为每个绑定/解除绑定调用的计数器是0!。我在调用bind时递增计数器,并在调用unbind时减少。我停止服务的唯一方法是打开基本应用程序,该应用程序定义了服务并关闭它。

编辑:还注意到onBind只被调用一次,即使对于其他绑定的应用程序,但所有这些应用程序的引用仍然是相同的服务,它们共享相同的信息,并且在android中只显示一个服务工作室。

编辑:我还观察到,如果其中一个使用该服务的应用是基础应用,如果我关闭它,服务就会中断,另一个应用程序启动,其他应用程序也不会注意到改变,他们继续使用服务,好像什么也没发生,这是可以理解的,因为它是一个远程服务。

发生了什么,我该怎么办?

1 个答案:

答案 0 :(得分:0)

对于被质疑的两点:

我能够验证CommonsWare说服务运行的过程是什么,但服务本身不是。起初,我在每个应用程序未绑定后都在服务中运行了一个线程,但在确定它最终没有完成后,服务就被破坏了。

第二个问题,关于服务被破坏,同时仍然与其他活动绑定,这是通过查看这个link来解决的,它描述了在不应该服务时杀死服务的android中的错误。我的案例只是通过让我的服务在前台运行来解决,我不知道这是可能的。

经过一些测试后,我确认服务仍然完好无损,只要任何应用程序与它绑定,并且在没有更多应用程序绑定后服务确实被正确销毁。