2

侦听器、接口、处理程序。

它们听起来都相似,但它们必须不同。

也许也可以在objective-c中“委托”。

4

3 回答 3

6

界面:

interface用于提供角色。根据设计模式,当某些行为不断变化时,必须将其封装在一个interface或一个abstract class.

例如:

假设有这个paint class,它有一个方法paintIt()

现在该方法paintIt()可以是徒手,着色等,因此其行为不断变化。所以我们需要把它封装在一个 interface或一个abstract class.

听众:

Listeners是侦听特定操作的接口,它们包含回调方法,该方法具有在完成特定操作时要触发的逻辑。

处理程序:

Handlers在android中用于将数据从非UI线程发布到UI线程。

于 2012-11-19T06:23:11.180 回答
1

Listener 几乎是 dot net 中的一种委托,可能是客观的 C。它的主要用途是在执行某些操作或事件时保持回调方法。在 dotnet 的情况下,我们将方法本身作为回调传递给委托(可能在 Objective C 中,情况会相同。),但在 java 中,没有像委托这样的概念。所以它使用接口来做同样的伎俩。

例如,如果我们需要将按钮单击分配给方法,在 dotnet 中,可能在目标 C 中,我们将把该函数指针传递给相应的单击委托。在 Java 中,我们要做的是创建一个像这样的接口:

public interface ButtonClickListener{
    void onClick();
}

然后在 Button 类中,我们将创建一个函数来接受这个监听器,而不是委托:

public void setOnClickListener(ButtonClickListener listener){
    mButtonClickListener=listener;
}

我们将在我们的类中使用已实现类的对象调用此setOnClickListener方法。ButtonClickListener

然后,每当 Button 点击​​发生时,Button 类的作用是:

mButtonClickListener.onClick();

这将调用已ButtonClickListener实现类的 onClick,我们可以在那里执行所需的操作。

处理程序与此无关。这是一个 Android 框架提供的类,用于在我们使用其他自定义线程时与 UI 线程同步操作。

希望你明白了!!

于 2012-11-19T06:27:51.470 回答
1

这很棘手,因为有太多重叠,尤其是提到 Objective-C。

这是我的最大努力:

侦听器是接口的单一变体。

查看http://developer.android.com/guide/topics/ui/ui-events.html#EventListeners

根据该页面,“事件”侦听器的独特之处在于它是一个单一回调接口。该页面特定于视图,但当然侦听器可以应用于任何其他类型的事件。

android.os.Handler 的 android 页面是:http: //developer.android.com/reference/android/os/Handler.html

如果您非常具体地查看差异,那么说处理程序更多地具有双重目的概念也许是合理的。处理程序包括发送消息/事件,然后接收它。

棒球?
场上的球员是球的倾听者。玩家手上的手套(弱类比)就是界面。一个球员为了好玩而将球抛向空中并接住它是一个处理者。
:)

在 Objective-C 中:接口在使用上基本相同,但名称不同:@protocol

Android/Java 的 Objective-C 监听器有多种实现方式,就像 java/android 中的监听器一样。我想说的最好的 Obj-C 对应物是通知(NSNotification 和 NSNotificationCenter)。这可能是有争议的。

当然,有多种编码方式和各种模式。android 中的 Handler 可以等同于在 Obj-C 消息中作为参数传递的块,或者委托也适合。

于 2012-11-19T06:36:50.637 回答