Java“事件调用外部”

时间:2011-02-07 12:30:24

标签: java android

我是Java的新手,我开始在Android平台上学习它,我知道开始学习移动平台仿真语言并不好,但无论如何....

我想问的关于java的问题,是“外部”调用某些方法。我的意思是,通常在程序或教程中,你只需要一些方法,它会根据某些动作自动运行。

实际上这非常好,我真的很喜欢它,但我想知道这是如何实现的。 JVM必须实现这些,还是以某种方式用户定义?

对于Android上的axample,方法surfaceCreated(),surfaceDestroyed()会在相应的事件上调用,而您可以处理它。类似的是按钮点击处理,以及更多的事件。

我想知道这是如何实现的,因为例如在C中你必须手动检查是否发生了某些动作。并且您受到OS提供的数据的限制。那么,JVM是否已预先定义了可以调用的操作,或者您可以手动以某种方式告诉它根据某些事情做某些事情吗?我知道这是一个奇怪的问题,但事实上它对我来说很奇怪,我无法更好地解释它。也许你可以理解我不知道你是否知道我主要为C编程的MCU编程,所以这种行为对我来说很奇怪。但我喜欢它。

2 个答案:

答案 0 :(得分:1)

这称为事件委派模型。

如果注册了侦听器,则发生任何事件时,将调用正确的代理。

请记住,事情一切都是oops,并将根据类和对象进行处理

我们可以通过一个非常简单的按钮点击示例来理解这一点。

考虑我制作这个课程

class MyButtonClickListener implements OnClickListener
{
   public void onClick(View v) 
  {
            //do something on button click
  }  
}

现在看到这个类正在实现一个接口。这个类必须提供body来实现它的空接口方法。否则代码将无法编译。

这可确保此类的每个对象都具有onClick方法体。现在让我们注册这个来听我们的按钮点击。

说我的按钮是button01

 button01.setOnClickListener(new MyButtonClickListener());

现在考虑对象button01在其中有一个列表,其中有一个对象的地址以便稍后做某事(在我们的例子中是新的MyButtonClickListener())。

现在布局管理器的编码方式是,在事件发生时(比如按钮点击)将此事件发送到对象侦听器列表以执行进一步操作。

这将以时尚的方式发生,当点击按钮然后检查监听器的按钮列表,如果发现它不是null,则意味着有一个监听器。现在在列表中找到的引用上,调用onClick方法。因为我们调用了setOnCLickListener来设置监听器,所以调用了onClick。如果你要检查这个方法的代码。你会发现方法是接收OnClickListener引用。这是实现OnClickListener接口的类的对象,因此必须为onClick方法提供一个主体。

因此执行此委派。这只是哎呀。我希望我能够将它解释到一个很好的水平。

答案 1 :(得分:0)

你问两件不同的事情:

您可以覆盖的一些方法,在某些操作发生时调用(onResume(),...)。它们总是被调用(由运行时/框架),当您的类重写它们时,将调用该方法的实现。但代码中的某处是对此方法的实际调用。这些被称为virtual methods

您订阅的按钮点击事件类似,但event-driven programming。订阅按钮单击事件时,例如

foo.setOnClickListener(new OnClickListener() {
    @Override
    public void onClick(View v) {
                  ... do stuff
            }
}

foo对象将OnClickListener保存到其内部的某处。单击该按钮时,如果它保存了任何OnClickListener,它将在其内部查找,如果是,则在每个按钮中调用onClick()方法。