同样,尝试支持多个回调客户端的服务可能会发现自己缺乏CPU资源,即使所有客户端行为相对良好。addTextChangedListener支持多个客户端的订阅,而Android库中的许多回调只支持一个。使用这些回调(例如,setOn KeyListener ),为特定对象上的特定回调设置一个新客户机将不再接收任何以前注册的client.The通知。事实上,它甚至不会被通知它不再是客户端。此后,新注册的客户端将接收所有通知。
我正在从一本书中学习Android编程,它引入了添加侦听器的概念。
从我的Java小体验中,我知道听众是什么以及他们在做什么。
不过,我不明白上段所述的是甚麽。
请洗脱
发布于 2013-07-02 11:26:59
当您在事件上设置回调侦听器时,通常有两种方法:
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)。
发布于 2013-07-02 11:19:52
我的解释是:
允许设置多个侦听器可能会占用资源,因为您必须通知所有客户端。
一些Android监听器(如addTextChangeListener)支持为多个客户端设置。
但是,大多数情况下,您设置的最后一个客户端将得到通知。
https://stackoverflow.com/questions/17423995
复制相似问题