【问题标题】:Binding to a service in Android绑定到 Android 中的服务
【发布时间】:2010-07-02 04:46:51
【问题描述】:

我对绑定到服务的工作原理有点困惑。我了解使用 Context.startService() 启动服务并且 bindService 不会调用 onStartCommand。但我的理解是,如果我使用 startService,我必须明确停止服务。但是如果没有更多的活动绑定到它,我希望该服务终止。

我的问题是调用 bindService 从不调用 onServiceConnected(),所以我的 Service binder 对象为 null。服务是否必须显式启动才能绑定到它?如果是这样,它如何知道在没有任何内容绑定到它时终止,以及我如何知道它是否已启动以便我知道使用绑定的对象?

【问题讨论】:

    标签: android binding service


    【解决方案1】:

    如果您使用BIND_AUTO_CREATE 作为标志调用bindService,系统会将您的活动绑定到该服务(如果它存在),否则如果它不存在,系统将为您启动该服务,然后它将您的活动绑定到服务。此外,如果您以这种方式启动服务,则该服务仅在它仍然绑定了一些上下文时才会保持活动状态。

    这是来自bindService():

    连接到应用程序服务,如果需要,创建它。这定义了您的应用程序和服务之间的依赖关系。给定的 conn 将在创建时接收服务对象,并在它死亡并重新启动时被告知。只要调用上下文存在,系统就会认为该服务是必需的。例如,如果这个 Context 是一个停止的 Activity,那么在 Activity 恢复之前,服务将不需要继续运行

    这是来自ServiceLyfecycle

    服务既可以启动,也可以绑定连接。在这种情况下,只要服务已启动或有一个或多个使用 Context.BIND_AUTO_CREATE 标志的连接,系统就会保持服务运行。一旦这两种情况都不成立,服务的 onDestroy() 方法就会被调用并且服务被有效地终止。从 onDestroy() 返回后,所有清理(停止线程、注销接收器)都应该完成。

    【讨论】:

    • 我认为它是这样工作的,但即使我传入 BIND_AUTO_CREATE 我的活页夹对象上也会出现空指针异常。事实证明,直到 onCreate() 退出后,服务才会被绑定。或者至少我是这么读的。
    • 您是否在清单文件中注册了您的服务?可以发布您的代码吗?
    • 是的,服务有效,我实际发布的是解决方案(99% 肯定)。在退出 oncreate 之前,该服务实际上不会被绑定。
    【解决方案2】:

    答案是我在使用服务之前并没有等待它实际被绑定,因为它是异步绑定的

    【讨论】:

      【解决方案3】:

      您应该在 onBind 中设置活页夹,并在 onCreate 中设置任何通用设置。 http://developer.android.com/reference/android/app/Service.html#ServiceLifecycle

      解释了启动和绑定服务的行为

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2023-03-11
        • 2010-12-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-12-29
        相关资源
        最近更新 更多