android - 如何正确解绑服务

标签 android service bind ondestroy

我有一个通过 BIND_AUTO_CREATE 绑定(bind)到我的 Activity 并以 START_STICKY 启动的服务。我没有明确调用 startService()。

由于当我的 Activity 被杀死时并不总是调用 onDestroy() 方法并且 onStop() 方法不可行,因为我不希望我的服务在用户只需按下主页按钮时停止,我不知道何时取消绑定(bind)我的服务。

这是我的问题:

  1. 如果我希望我的服务在我的 Activity Activity 时运行并在我的 Activity 被终止时停止,我应该在哪里取消绑定(bind)我的服务?

  2. 当前调用 onDestroy() 方法并且我调用 unbindService() 时,不会触发服务的 onUnbind() 方法。为什么?

最佳答案

I do not explicitly call startService()

在这种情况下,覆盖 onStartCommand(并返回 START_STICKY)没有意义,因为它不会被调用。

1.If I want my Service to run when my Activity is alive and to stop when my Activity get killed, where should I unbind my Service?

如果你不想在onPause中进行,你可以在onDestroy中解除绑定(bind),这样就可以了。在极少数情况下,当您的 Activity 在没有 onDestroy 的情况下被杀死时,它将被 Android 解除绑定(bind),(因此您的服务也将被解除绑定(bind)并正确销毁),如所述 here :

When your client is destroyed, it will unbind from the service

至于

2.When the onDestroy() method is currently called and I call unbindService(), the Service's onUnbind() method isn't triggered. Why?

我建议你有其他人绑定(bind)它,否则应该调用onUnbind。尝试在此方法中放置一个断点并验证它是否被命中。此外,验证您的服务 onDestroy 在这种情况下被调用。

关于android - 如何正确解绑服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22939761/

相关文章:

android - ImageLoader NullPointerException

java - 如何解决 : Error:Execution failed for task ':app:kaptDebugKotlin' ?

android - Web Speech api 不适用于 android chrome

c# - 在 C# 服务应用程序中配置 log4net 的步骤

绑定(bind)一组数据集的行?

R:合并两个数据帧而不相乘行

javascript - 单击循环后如何更改颜色?

android - Google Play 在我的应用中添加了不需要的权限

android - 如何在独立的 android 服务中避免 ANR

android - android服务和web服务有什么区别