我想保留对绑定到已启动和绑定的Android服务的每个客户端的引用。 我的服务不在单独的进程中。
我可以绑定多个客户端,例如 - 1 个活动和 2 个片段。他们可能都对从服务返回的不同事件的组合感兴趣。 理想情况下,我想在绑定每个客户端时向服务注册每个客户端,然后迭代每个连接的客户端并向他们发送消息。
现在我正在使用绑定器向客户端公开服务的 API,但我不满意使用广播将数据从服务发送回客户端。 感觉好"松"。想知道是否有更简洁和结构化的方法?
消息处理程序是一种方式,但我觉得我会丢失客户端当前通过其访问服务 API 的绑定器 API。
此处详述的绑定服务方法是合适的。您不必担心Handlers
,甚至Intents
(一旦客户端绑定(。
参考给定链接中的示例:您可以简单地向LocalService
对象添加功能,例如,
/** method for clients */
public int getRandomNumber() {
return mGenerator.nextInt(100);
}
private Set<MyEventListener> mListeners = new HashSet<>();
/** A MyEventListener (your Activity, Fragment, etc.) calls this in its
* onServiceConnected() method, on the reference it gets from getService(). */
public void registerListener(MyEventListener listener)
{
mListeners.add(listener);
}
public void sendEvent()
{
for(MyEventListener listener : mListeners)
{
listener.onEvent();
}
}
。等等。所有方法在 UI 线程上同步执行。所有对象(Services
和客户端(MyEventListener
(保证其生存期至少与ServiceConnection
一样长。此外,在您显式取消绑定之前,ServiceConnection
不会遇到onServiceDisconnected()
调用,因为您使用的是进程内服务。