2 Stimmen

Java "extern bei Ereignisaufruf"

Ich bin neu in Java und ich begann, es auf Android-Plattform zu lernen, ich weiß, dass es nicht gut ist, die Sprache auf der Emulation der mobilen Plattform zu lernen, aber trotzdem ....

Was ich gerne über Java wissen möchte, ist der "externe" Aufruf einiger Methoden. Ich meine, oft in Programm, oder Tutorials, Sie gerade ovveride einige Methode, und es wird automatisch auf einige Aktion basiert ausgeführt.

Das ist wirklich sehr schön, ich mag es wirklich, aber ich würde gerne wissen, wie das umgesetzt wird. Hat JVM hat diese zu implementieren, oder sind sie Benutzer-definierbare irgendwie?

Zum Beispiel gibt es unter Android folgende Methoden surfaceCreated(),surfaceDestroyed() die bei dem jeweiligen Ereignis aufgerufen werden, und Sie können es dann bearbeiten. Ähnlich verhält es sich mit der Behandlung von Tastenklicks und vielen anderen Ereignissen.

Ich würde nur gerne wissen, wie dies implementiert ist, denn zum Beispiel in C müssen Sie manuell prüfen, ob eine Aktion stattgefunden hat oder nicht. Und Sie sind durch die vom Betriebssystem bereitgestellten Daten begrenzt. Hat die JVM also vordefinierte Aktionen, die sie aufrufen kann, oder kann man ihr manuell sagen, dass sie etwas tun soll, das auf irgendetwas basiert? Ich weiß, das ist eine seltsame Frage, aber sie ist mir so fremd, dass ich sie nicht besser erklären kann. Vielleicht können Sie mein Nichtwissen verstehen, wenn Sie wüssten, dass ich hauptsächlich für MCU in C programmiert habe, daher ist dieses Verhalten für mich seltsam. Aber ich mag es.

1voto

Rohit Sharma Punkte 13497

Dies wird als Ereignis-Delegationsmodell bezeichnet.

Beim Auftreten eines Ereignisses, wenn Zuhörer registriert sind, werden geeignete Delegierte aufgerufen.

Denken Sie daran, dass alles, was ist oops in diesem und wird in Form von Klassen und Objekten behandelt werden

Wir können dies anhand eines sehr einfachen Beispiels verstehen, z. B. eines Tastenklicks.

Nehmen wir an, ich mache diese Klasse

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

Diese Klasse implementiert also eine Schnittstelle. Diese Klasse muss einen Körper für die leere Methode der Schnittstelle bereitstellen, um sie zu implementieren, sonst lässt sich der Code nicht kompilieren.

Dadurch wird sichergestellt, dass jedes Objekt dieser Klasse einen Body der onClick-Methode hat. Lassen Sie uns diese nun registrieren, um den Klick auf unsere Schaltfläche abzuhören.

sagen wir, mein Button ist button01

 button01.setOnClickListener(new MyButtonClickListener());

Nehmen wir an, das Objekt button01 hat irgendwo eine Liste, die eine Adresse eines Objekts hat, das später etwas tun soll (in unserem Fall new MyButtonClickListener()).

Die Layout-Manager sind nun so kodiert, dass sie beim Auftreten eines Ereignisses (z. B. beim Klicken einer Schaltfläche) dieses Ereignis an die Liste der Objekt-Listener senden, um weitere Aktionen durchzuführen.

Dies wird in der Art und Weise geschehen sagen, wenn die Schaltfläche angeklickt wird dann Tasten Liste der Hörer überprüft wird, wenn es nicht null, was bedeutet, es ist ein Hörer gefunden. jetzt auf den Verweis in der Liste gefunden, onClick-Methode aufgerufen wird. speziell onClick aufgerufen wird, weil wir die setOnCLickListener aufgerufen, um den Hörer zu setzen. wenn Sie den Code für diese Methode zu überprüfen. Sie finden Methode empfängt OnClickListener Referenz. dies ist ein Objekt einer Klasse, die die OnClickListener-Schnittstelle implementiert, so muss einen Körper zu onClick-Methode zur Verfügung gestellt haben.

und so wird diese delegierung durchgeführt. das ist einfach oops. ich hoffe, ich kann es gut erklären.

0voto

Axarydax Punkte 16025

Sie fragen nach zwei verschiedenen Dingen:

einige Methoden, die Sie überschreiben können, die aufgerufen werden, wenn eine Aktion stattfindet (onResume(),...). Sie werden immer aufgerufen (von der Laufzeit/Framework), und wenn Ihre Klasse sie überschreibt, wird Ihre Implementierung dieser Methoden aufgerufen. Aber irgendwo im Code befindet sich ein tatsächlicher Aufruf dieser Methode. Diese werden aufgerufen virtuelle Methoden .

In der Schaltfläche klicken Ereignisse, die Sie abonnieren, sind ähnlich, aber das ist ereignisgesteuerte Programmierung . Wenn Sie ein Schaltflächenklick-Ereignis abonnieren, zum Beispiel

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

die foo Objekt speichert den OnClickListener irgendwo in seinen Interna. Wenn die Schaltfläche angeklickt wird, schaut es in seinen Interna nach, ob es irgendwelche OnClickListener gespeichert hat, und wenn ja, ruft es die onClick()-Methode in jedem von ihnen auf.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X