【发布时间】:2015-12-24 16:39:13
【问题描述】:
我正在探索 Android 中的绑定服务。我在 Android 开发人员文档中遇到了关于 Bound service 的以下行。
多个客户端可以同时连接到服务。然而 系统调用您的服务的 onBind() 方法来检索 IBinder 仅当第一个客户端绑定时。然后系统提供相同的 IBinder 绑定到任何其他绑定的客户端,而不调用 onBind() 再次。
正如这里提到的,Android 系统似乎正在使用已经存在的IBinder 来返回其他客户端。
这个实现是否松散地基于享元设计模式的概念?众所周知,享元模式主要用于减少创建的对象数量,减少内存占用并提高性能。
更新:
我检查了处理此代码的 Android 源代码。 如下:
if (!data.rebind) {
IBinder binder = s.onBind(data.intent);
ActivityManagerNative.getDefault().publishService(
data.token, data.intent, binder);
} else {
s.onRebind(data.intent);
ActivityManagerNative.getDefault().serviceDoneExecuting(
data.token, SERVICE_DONE_EXECUTING_ANON, 0, 0);
}
data.rebind 只是一个布尔值,在静态类中声明如下,data 是这个BindServiceData 类的对象。
static final class BindServiceData {
IBinder token;
Intent intent;
boolean rebind;
public String toString() {
return "BindServiceData{token=" + token + " intent=" + intent + "}";
}
}
因此,也许它与享元模式没有直接关系。
【问题讨论】:
-
见
android/app/ActivityThread.java
标签: android design-patterns service