代码之家  ›  专栏  ›  技术社区  ›  Falmarri

绑定到Android中的服务

  •  2
  • Falmarri  · 技术社区  · 14 年前

    我对绑定到服务的工作方式有点困惑。我理解使用context.startService()启动服务,而bindservice不调用onStartCommand。但我的理解是,如果我使用StartService,就必须显式地停止该服务。但是,如果没有更多的活动与服务绑定,我希望它死掉。

    我的问题是调用bindservice从不调用onServiceConnected(),因此我的服务绑定对象为空。必须显式启动服务才能绑定到它吗?如果是这样,它如何知道当不再有任何东西绑定到它时终止,以及如何知道它是否已经启动,以便我可以知道使用绑定对象?

    3 回复  |  直到 14 年前
        1
  •  3
  •   hara    14 年前

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

    这是来自 bindService():

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

    这是从 ServiceLyfecycle

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

        2
  •  1
  •   Falmarri    14 年前

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

        3
  •  0
  •   Al Sutton    14 年前

    您应该在onbind中设置绑定器,在oncreate中设置任何通用设置。启动和绑定服务的行为在 http://developer.android.com/reference/android/app/Service.html#ServiceLifecycle