将数据发送到绑定服务
Sending data to a bound service
我有一个启动的服务。此外,其他组件可以绑定到该服务。当一个组件绑定到服务时,它有新的参数需要传递给服务。每次调用者需要绑定时是否可以强制调用 onBind (以便通过意图传递新数据)?如果是这样,每次调用 onBind 的额外开销是否很大?顺便说一句,这是我扩展 Binder 而不是使用 Messenger 的本地服务。
需要考虑的几点:
1) onBind() 仅在第一次绑定请求时被调用。所有后续调用都不会导致调用 onBind。以下是 Google 文档的摘录:
多个客户端可以同时连接到该服务。但是,系统仅在第一个客户端绑定时调用服务的 onBind() 方法来检索 IBinder。然后系统将相同的 IBinder 传递给任何其他绑定的客户端,而无需再次调用 onBind()。
因此,您不应期望每次调用者发送绑定请求时都会调用 onBind。
2) 使用从 onBind() 返回的实例,调用者可以访问服务的 public 方法。您可以使用一个 public 方法来发送任何参数。这是关于此的 Google 文档:
如果您的服务对您自己的应用程序是私有的并且与客户端在同一进程中运行(这很常见),您应该通过扩展 Binder class 并返回来创建您的接口它的一个实例来自 onBind()。客户端接收 Binder 并可以使用它直接访问 Binder 实现甚至服务中可用的 public 方法。
3) Google建议不要在bindService的intent参数中使用任何Extra参数。这可能是由于上面提到的第 1) 点。以下是 Google 文档的摘录:
用于绑定到此服务的 Intent,如提供给 Context.bindService 的那样。请注意,此时 Intent 中包含的任何额外内容都不会在此处显示。
如果没有其他需要将其作为绑定服务,您可以将其作为启动服务,并在用于启动服务的意图中传递额外的参数。该意图将在 onStartCommand() 中可用。如果出于其他原因需要绑定服务,您可以使用上面的选项 2) 或按照此处提到的更复杂的方法:
我有一个启动的服务。此外,其他组件可以绑定到该服务。当一个组件绑定到服务时,它有新的参数需要传递给服务。每次调用者需要绑定时是否可以强制调用 onBind (以便通过意图传递新数据)?如果是这样,每次调用 onBind 的额外开销是否很大?顺便说一句,这是我扩展 Binder 而不是使用 Messenger 的本地服务。
需要考虑的几点:
1) onBind() 仅在第一次绑定请求时被调用。所有后续调用都不会导致调用 onBind。以下是 Google 文档的摘录:
多个客户端可以同时连接到该服务。但是,系统仅在第一个客户端绑定时调用服务的 onBind() 方法来检索 IBinder。然后系统将相同的 IBinder 传递给任何其他绑定的客户端,而无需再次调用 onBind()。
因此,您不应期望每次调用者发送绑定请求时都会调用 onBind。
2) 使用从 onBind() 返回的实例,调用者可以访问服务的 public 方法。您可以使用一个 public 方法来发送任何参数。这是关于此的 Google 文档:
如果您的服务对您自己的应用程序是私有的并且与客户端在同一进程中运行(这很常见),您应该通过扩展 Binder class 并返回来创建您的接口它的一个实例来自 onBind()。客户端接收 Binder 并可以使用它直接访问 Binder 实现甚至服务中可用的 public 方法。
3) Google建议不要在bindService的intent参数中使用任何Extra参数。这可能是由于上面提到的第 1) 点。以下是 Google 文档的摘录:
用于绑定到此服务的 Intent,如提供给 Context.bindService 的那样。请注意,此时 Intent 中包含的任何额外内容都不会在此处显示。
如果没有其他需要将其作为绑定服务,您可以将其作为启动服务,并在用于启动服务的意图中传递额外的参数。该意图将在 onStartCommand() 中可用。如果出于其他原因需要绑定服务,您可以使用上面的选项 2) 或按照此处提到的更复杂的方法: