这是什么意思?

时间:2013-07-02 11:09:02

标签: android callback

  

出于同样的原因,尝试支持多个回调客户端的服务可能会发现自己缺乏CPU资源,即使所有客户端都表现得相对较好。 addTextChangedListener支持多个客户端的订阅,而Android库中的许多回调仅支持一个。使用这些回调(例如setOn KeyListener),为特定对象上的特定回调设置新客户端将替换任何以前的客户端。先前注册的客户端将不再接收任何回调通知。事实上,它甚至不会被通知它不再是客户端。新注册的客户端将会收到所有通知。

我正在从一本书中学习Android编程,它引入了添加听众的概念 我知道听众是什么以及他们从我的小Java经历中做了些什么。

但是,我不明白上段所说的内容 请说清楚

2 个答案:

答案 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)。