Android从服务到客户端的通信

问题描述 投票:2回答:1

我想保留对绑定到启动并绑定的Android服务的每个客户端的引用。我的服务不在单独的过程中。

我可以绑定多个客户端,例如-1个活动和2个片段。他们可能都对从服务返回的不同事件的组合感兴趣。理想情况下,我想在每个客户端绑定时向该服务注册,然后遍历每个连接的客户端并向其发送消息。

现在,我正在使用Binder将服务的API公开给客户端,但是我不满意使用广播将数据从服务发送回客户端。感觉很“松”。想知道是否有更简洁和结构化的方法吗?

消息处理程序是一种方法,但是我感觉我将失去客户端当前通过其访问服务API的绑定器API。

android android-service android-service-binding android-binder
1个回答
0
投票

Bound Service详细方法here是合适的。您不必担心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()调用。

© www.soinside.com 2019 - 2024. All rights reserved.