IIUC,给定的 Android 服务应该只有一个实例,它是一个单例。
然而,我的服务被多次实例化,虽然我 什么都不做。
当服务崩溃时(例如当我通过adb卸载应用程序时),它 被安排重新启动(“计划重新启动崩溃的服务..”)。我 理解这是服务具有粘性的结果。
之后,当我的应用程序启动时,它会调用 startService() 和 bindService(),并且 服务得到适当的启动和绑定(bind)。但服务是 重新实例化并重复调用 onCreate() 计划重启。
然后每个实例等待客户端绑定(bind)和注册,但是 onBind() 只是 在“主”服务实例中调用。额外的实例稍等 客户端绑定(bind),并且由于没有发生,他们调用 stopSelf()。
但是 stopSelf() 对这些“死”实例完全没有影响,onDestroy() 永远不会被调用。
“主要”服务实例确实按预期工作,并且当它决定调用 stopSelf(), onDestroy() 确实被调用了。
更糟糕的是,所有这些死亡实例不断累积,它们永远不会被摧毁。 因此,他们唯一可能的结局就是崩溃(每次我都发生这种情况 通过 adb 启动/安装),从而安排重启。
所以最后我得到了很多这样的死实例,它们被重新启动了 大约每分钟一次。
有人知道这是怎么回事吗?
最佳答案
如果我使用 eclipse 重新启动具有远程服务的应用程序,我会遇到类似的行为。根据 logcat,系统认为被杀死的服务发生崩溃并尝试重新启动该服务。同时服务也随着重启的app一起重启了。由于某些未知原因,Android 系统没有意识到已经有一个正在运行的服务,并尝试启动一个新服务。
它在 Optimus one、Galaxy tab 和 EVO 3D 上多次发生。 Nexus one 没问题。
关于android - 为什么我的服务会被多次实例化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3804833/