gpt4 book ai didi

java - 绑定(bind)服务的多个实例 - 绑定(bind)服务在应用程序结束后仍然存在

转载 作者:行者123 更新时间:2023-12-01 14:44:11 25 4
gpt4 key购买 nike

作为一名刚接触 Android 的开发人员,我想我可能误解了绑定(bind)服务。

我创建了一项服务来结束对服务器的访问。作为此服务的一部分,该服务正在监听多播地址,以识别本地网络上的设备何时出现和消失。

但是,由于启动了多个服务实例,我遇到了问题。当 Activity 关闭(使用后退按钮)然后不久后重新打开时,就会发生这种情况。效果是该服务无法绑定(bind)到本地端口,因此无法监听多播。

我原以为一旦 Activity 停止,绑定(bind)的服务就会终止,但事实似乎并非如此。

我是否误解了绑定(bind)服务或者我做错了什么?

编辑

因此,我的误解是,我假设一旦最后一个非守护线程关闭,程序就会被清理,并且一旦 Activity 终止

我通过显式取消监听线程并在 onDestroy() 中关闭套接字来修复此问题。

最佳答案

However I'm having problems due to there being multiple instances of the service started

任何时候,您的进程中都只会运行零个或一个给定服务类的实例。

I had thought that the bound service would die once the activity stopped but this appears not to be the case.

该服务将在以下时间后被销毁:

  • 所有调用bindService()的电话都有其对应的unbindService() ,并且
  • 如果您调用startService()对于这个正在运行的服务实例,您可以调用 stopService()或服务电话stopSelf()

服务被破坏的精确时间是不确定的,尽管从我所看到的情况来看,它通常相当快。不过,我不能排除您的第二个 Activity 实例在销毁之前绑定(bind)到服务的可能性,从而防止它被销毁。

or am I doing something else wrong?

当服务被销毁时,也许您没有正确清理多播套接字,或者当套接字已从先前的绑定(bind)中打开时,您可能正在尝试打开套接字。

我不完全清楚为什么你在这里使用绑定(bind)模式。就我个人而言,我发现通常这会带来更多的麻烦而不是值得的。也许考虑使用命令模式,通过 startService() 向服务发送命令并通过 stopService() 停止服务或stopSelf() .

关于java - 绑定(bind)服务的多个实例 - 绑定(bind)服务在应用程序结束后仍然存在,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15622762/

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