出于同样的原因,尝试支持多个回调客户端的服务可能会发现自己缺乏CPU资源,即使所有客户端都表现得相对较好。 addTextChangedListener支持多个客户端的订阅,而Android库中的许多回调仅支持一个。使用这些回调(例如setOn KeyListener),为特定对象上的特定回调设置新客户端将替换任何以前的客户端。先前注册的客户端将不再接收任何回调通知。事实上,它甚至不会被通知它不再是客户端。新注册的客户端将会收到所有通知。
我正在从一本书中学习Android编程,它引入了添加听众的概念 我知道听众是什么以及他们从我的小Java经历中做了些什么。
但是,我不明白上段所说的内容 请说清楚
答案 0 :(得分:1)
我试图解释:
允许设置多个侦听器可能会耗费大量资源,因为您必须通知所有客户端。
支持为多个客户端设置一些Android侦听器(如addTextChangeListener)。
但是,大部分都没有,而您设置的最后一个客户端是获取通知的客户端。
答案 1 :(得分:1)
在事件上设置回调侦听器时,通常有两种方法:
private MyEventListener listener;
...
public void setEventListener(MyEventListener listener){
this.listener = listener;
}
...
// some event later on
this.listener.callback(interestingData);
此处,每次从客户端类设置侦听器时,都会替换现有侦听器。只有最后设置监听器的客户端才会收到回叫。
另一种方式是这样的:
private ArrayList<MyEventListener> listeners;
...
public void setEventListener(MyEventListener listener){
if (listeners == null){
listeners = new ArrayList<MyEventListener>();
}
if(!listeners.contains(listener){
listeners.add(listener);
}
}
...
// some event later on
for(MyEventListener listener:listeners){
listener.callback(interestingData);
}
第二种方法的问题是你无法控制有多少客户端收到回调,并且注册了很多客户端,他们可能会消耗大量处理回调的CPU。
您可以人为地限制侦听器的数量(if(listeners.count() < 5)
),但从OOP的角度来看这是没有意义的。
哪一个是正确的取决于您的设计。我通常使用后一种模式,因为我知道会有多少客户端,而且数量很小(通常小于5)。