IIUC,应该只有一个给定Android服务的实例,它是一个单例.
但是,我的服务多次实例化,尽管我没有做任何事情.
当服务崩溃时(例如,当我通过adb卸载应用程序时),它会被安排重新启动("计划重新启动崩溃的服务..").我知道这是服务粘性的影响.
之后,当我的应用程序启动时,它调用startService()和bindService(),服务得到适当的启动和绑定.但是该服务然后被重新实例化并且重复调用onCreate(),因为它被安排多次重启.
然后每个实例等待客户端绑定和注册,但onBind()仅在"main"服务实例中调用.其他实例等待客户端绑定,因为没有发生,所以它们调用stopSelf().
但是stopSelf()在这些"死"实例中绝对没有效果,从不调用onDestroy().
"main"服务实例按预期工作,当它决定调用stopSelf()时,确实调用了onDestroy().
更糟糕的是,所有这些死亡事件都在积累,它们永远不会被摧毁.因此,他们唯一可能的结果是崩溃(每次我通过adb启动/安装时都会发生),从而计划重启.
所以最终我得到了许多这些死的实例,它们大约每分钟一次又一次地重新启动.
有谁知道发生了什么?
因为我还没有看到你的代码,这只是一个猜测:也许你有内存泄漏,导致服务无法正确销毁。这是我能想到获得多个服务实例的唯一原因。例如,如果您的服务持有某个也引用您的服务的对象。这种情况在内部类中经常发生。
请观看 Google I/O 大会上的这段视频,了解您的服务是否存在此问题以及如何找到它:http://www.youtube.com/watch ?v=_CruQY55HOk&feature=player_embedded