gpt4 book ai didi

android - 为什么我的服务会被多次实例化?

转载 作者:塔克拉玛干 更新时间:2023-11-02 21:18:48 26 4
gpt4 key购买 nike

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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com