Android 每个活动是否需要绑定到服务&;使用startService()创建时会发生什么

Android 每个活动是否需要绑定到服务&;使用startService()创建时会发生什么,android,binding,service,android-activity,Android,Binding,Service,Android Activity,我有一个服务,应该保持与家庭自动化控制器(HAC)的持续连接。在应用程序的首选项中,我会让用户选择保持**与HAC的连接,或者在应用程序未使用时放弃与HAC的连接。我打算使用startService(),并查看首选项,看看是否有必要从服务中调用stopSelf() 我基本上有两个问题: 是否需要从应用程序中的每个活动绑定到服务?(我发现在SplashScreen活动启动并绑定到服务之后,onBind()似乎不会执行)。我甚至注释掉了一个活动对bindService()的调用,我仍然能够使用该服务

我有一个服务,应该保持与家庭自动化控制器(HAC)的持续连接。在应用程序的首选项中,我会让用户选择保持**与HAC的连接,或者在应用程序未使用时放弃与HAC的连接。我打算使用startService(),并查看首选项,看看是否有必要从服务中调用stopSelf()

我基本上有两个问题:

  • 是否需要从应用程序中的每个活动绑定到服务?(我发现在SplashScreen活动启动并绑定到服务之后,onBind()似乎不会执行)。我甚至注释掉了一个活动对bindService()的调用,我仍然能够使用该服务的调用。我希望使用onBind()回调来验证该服务是否仍然具有到HAC的有效连接

  • 如果我使用startService(),然后使用bindService();如果没有其他对象绑定,unBindService()会允许服务停止吗?另外,如果我用bindService()启动服务,然后调用startService();会发生什么?我试图理解这两种与服务交互的方法是如何影响生命周期的

  • 谢谢, J

    **我意识到这可能会影响电池寿命,但有时NotificationManager会告诉您前门廊上的运动检测器刚刚被触发,这很好

    我有一个服务,应该保持与家庭自动化控制器(HAC)的持续连接。在应用程序的首选项中,我会让用户选择保持**与HAC的连接,或者在应用程序未使用时放弃与HAC的连接。我打算使用startService(),并查看首选项,看看是否有必要从服务中调用stopSelf()

    这是一种令人耳目一新的理性和明智的方法——让用户控制设备的使用方式。荣誉

    是否需要从应用程序中的每个活动绑定到服务

    如果使用
    startService()
    启动服务,则无需从应用程序中的任何活动绑定到该服务

    我希望使用onBind()回调来验证该服务是否仍然具有到HAC的有效连接

    特别是对于轻量级、只读、不太可能导致GC问题的连接状态之类的问题,我只会将其固定在静态数据成员中。现在,如果您需要一个比这更复杂的API,那么您将需要绑定,但是当涉及到配置更改(例如,屏幕旋转)时,绑定在身体的各个部位都是一个难题

    如果我使用startService(),然后使用bindService();如果没有其他对象绑定,unBindService()会允许服务停止吗

    否,
    startService()
    将保留它,而不管
    unbindService()

    另外,如果我用bindService()启动服务,然后调用startService();会发生什么

    嗯……你能说得更具体些吗?我的意思是,我可以很自然地说,你的事件序列不会导致时空连续体的破裂,也不会导致我自发地长头发。:-)

    我有一个服务,应该保持与家庭自动化控制器(HAC)的持续连接。在应用程序的首选项中,我会让用户选择保持**与HAC的连接,或者在应用程序未使用时放弃与HAC的连接。我打算使用startService(),并查看首选项,看看是否有必要从服务中调用stopSelf()

    这是一种令人耳目一新的理性和明智的方法——让用户控制设备的使用方式。荣誉

    是否需要从应用程序中的每个活动绑定到服务

    如果使用
    startService()
    启动服务,则无需从应用程序中的任何活动绑定到该服务

    我希望使用onBind()回调来验证该服务是否仍然具有到HAC的有效连接

    特别是对于轻量级、只读、不太可能导致GC问题的连接状态之类的问题,我只会将其固定在静态数据成员中。现在,如果您需要一个比这更复杂的API,那么您将需要绑定,但是当涉及到配置更改(例如,屏幕旋转)时,绑定在身体的各个部位都是一个难题

    如果我使用startService(),然后使用bindService();如果没有其他对象绑定,unBindService()会允许服务停止吗

    否,
    startService()
    将保留它,而不管
    unbindService()

    另外,如果我用bindService()启动服务,然后调用startService();会发生什么


    嗯……你能说得更具体些吗?我的意思是,我可以很自然地说,你的事件序列不会导致时空连续体的破裂,也不会导致我自发地长头发。:-)

    如果没有binder对象,我将静态地访问字段和方法?@tunneling:同样,对于像读取当前状态这样简单的事情,静态数据成员(例如int、String或enum)应该可以。如果你需要比这更复杂的东西,你需要使用绑定。更具体地说。。。我考虑同时使用bindService()[短期]和startService()[长期]启动服务。所以我只是想了解调用这些方法(以各种顺序)会如何影响服务生命周期的动态。@tunneling:顺序并不重要。如果在调用最后一个
    unbindService()
    时存在未完成的
    startService()
    ,则该服务将保持运行。如果没有,服务将停止。@Commonware:在服务中,我启动一个连接线程