Heim > Java > javaLernprogramm > Detaillierte Code-Erklärung des Rückrufmechanismus

Detaillierte Code-Erklärung des Rückrufmechanismus

Y2J
Freigeben: 2017-05-11 09:25:43
Original
1430 Leute haben es durchsucht

In diesem Artikel werden hauptsächlich relevante Informationen zur detaillierten Erläuterung von Beispielen für Java-Rückrufmechanismen vorgestellt. Freunde, die sie benötigen, können sich auf

Ausführliche Erläuterungen von Beispielen für Java-Rückrufmechanismen beziehen

Ich habe es vorher nicht verstanden. Was ist ein Rückruf? Ich höre jeden Tag Leute darüber sprechen, eine Rückrufmethode hinzuzufügen, und ich frage mich, was eine Rückrufmethode ist. Dann habe ich viel im Internet gesucht, es aber nicht ganz verstanden. Jetzt weiß ich, dass Klasse A eine bestimmte Methode C in Klasse B aufruft ruft wiederum eine Methode C in Klasse A auf. Diese Methode D wird als Callback-Methode bezeichnet. Wenn Sie so aussehen, wird Ihnen vielleicht etwas schwindelig. Ich habe es am Anfang auch nicht verstanden Lesen Sie, was andere über die klassischere Rückrufmethode gesagt haben:

  • Klasse A implementiert SchnittstelleCallBack-Rückruf——Hintergrund 1

  • in Klasse A Enthält eine Referenzb der Klasse B ——Hintergrund 2

  • Klasse B hat eine Methode f (CallBack-Callback) mit einem Callback-Parameter — —Hintergrund 3

  • As Objekta ruft die Methode f von B auf (CallBack-Rückruf) ——Klasse A ruft jemanden der Klasse B auf, Methode C

  • Dann kann b die Methode von A in der Methode f (CallBack-Rückruf) aufrufen – Klasse B ruft a auf Methode der Klasse A D

Jeder verwendet gerne das Beispiel eines Telefonanrufs. Um mit der Zeit Schritt zu halten, werde ich auch dieses Beispiel verwenden plus Rückruf

Eines Tages traf ich Xiao Wang. Als ich auf eine sehr schwierige Frage stieß, die Frage war „1 + 1 =?“, rief ich Xiao Li an und fragte ihn, was ich nicht wusste Also sagte er zu Xiao Wang, dass er darüber nachdenken würde, nachdem ich mit den anstehenden Dingen fertig war. Da er die Antwort wollte, hielt Xiao Wang nicht dummerweise das Telefon in der Hand und wartete auf Xiao Lis Antwort, also sagte Xiao Wang zu Xiao Li: Ich möchte immer noch einkaufen gehen, ruf mich an und sag es mir, also legte er auf. Nach einer Stunde rief Xiao Li an und sagte ihm, dass die Antwort 2 sei

/** 
 * 这是一个回调接口 
 * @author xiaanming 
 * 
 */ 
public interface CallBack { 
 /** 
  * 这个是小李知道答案时要调用的函数告诉小王,也就是回调函数 
  * @param result 是答案 
  */ 
 public void solve(String result); 
}
Nach dem Login kopieren
/** 
 * 这个是小王 
 * @author xiaanming 
 * 实现了一个回调接口CallBack,相当于----->背景一 
 */ 
public class Wang implements CallBack { 
 /** 
  * 小李对象的引用 
  * 相当于----->背景二 
  */ 
 private Li li; 
 
 /** 
  * 小王的构造方法,持有小李的引用 
  * @param li 
  */ 
 public Wang(Li li){ 
  this.li = li; 
 } 
  
 /** 
  * 小王通过这个方法去问小李的问题 
  * @param question 就是小王要问的问题,1 + 1 = ? 
  */ 
 public void askQuestion(final String question){ 
  //这里用一个线程就是异步, 
  new Thread(new Runnable() { 
   @Override 
   public void run() { 
    /** 
     * 小王调用小李中的方法,在这里注册回调接口 
     * 这就相当于A类调用B的方法C 
     */ 
    li.executeMessage(Wang.this, question); 
   } 
  }).start(); 
   
  //小网问完问题挂掉电话就去干其他的事情了,诳街去了 
  play(); 
 } 
 
 public void play(){ 
  System.out.println("我要逛街去了"); 
 } 
 
 /** 
  * 小李知道答案后调用此方法告诉小王,就是所谓的小王的回调方法 
  */ 
 @Override 
 public void solve(String result) { 
  System.out.println("小李告诉小王的答案是--->" + result); 
 } 
  
}
Nach dem Login kopieren
durch das obige Beispiel: Haben Sie den Rückrufmechanismus fast verstanden? Das Obige ist ein asynchroner Rückruf. Werfen wir einen Blick auf die synchrone Rückrufmethode
/** 
 * 这个就是小李啦 
 * @author xiaanming 
 * 
 */ 
public class Li { 
 /** 
  * 相当于B类有参数为CallBack callBack的f()---->背景三 
  * @param callBack 
  * @param question 小王问的问题 
  */ 
 public void executeMessage(CallBack callBack, String question){ 
  System.out.println("小王问的问题--->" + question); 
   
  //模拟小李办自己的事情需要很长时间 
  for(int i=0; i<10000;i++){ 
    
  } 
   
  /** 
   * 小李办完自己的事情之后想到了答案是2 
   */ 
  String result = "答案是2"; 
   
  /** 
   * 于是就打电话告诉小王,调用小王中的方法 
   * 这就相当于B类反过来调用A的方法D 
   */ 
  callBack.solve(result);  
 } 
}
Nach dem Login kopieren
onClick
/** 
 * 测试类 
 * @author xiaanming 
 * 
 */ 
public class Test { 
 public static void main(String[]args){ 
  /** 
   * new 一个小李 
   */ 
  Li li = new Li(); 
 
  /** 
   * new 一个小王 
   */ 
  Wang wang = new Wang(li); 
   
  /** 
   * 小王问小李问题 
   */ 
  wang.askQuestion("1 + 1 = ?"); 
 } 
}
Nach dem Login kopieren
() 🎜> Jetzt analysieren wir es

Android Ansicht Die Klickmethode onclick() ist eine Rückrufmethode. Diese Methode wird ausgeführt, wenn der Benutzer auf die Schaltfläche „Ansicht“ klickt
Das Folgende ist die View-Klasse. Die setOnClickListener-Methode entspricht Klasse B. Es wird nur der Schlüsselcode gepostet

//这个是View的一个回调接口 
/** 
 * Interface definition for a callback to be invoked when a view is clicked. 
 */ 
public interface OnClickListener { 
 /** 
  * Called when a view has been clicked. 
  * 
  * @param v The view that was clicked. 
  */ 
 void onClick(View v); 
}
Nach dem Login kopieren
package com.example.demoactivity; 
 
import android.app.Activity; 
import android.os.Bundle; 
import android.view.View; 
import android.view.View.OnClickListener; 
import android.widget.Button; 
import android.widget.Toast; 
 
/** 
 * 这个就相当于Class A 
 * @author xiaanming 
 * 实现了 OnClickListener接口---->背景一 
 */ 
public class MainActivity extends Activity implements OnClickListener{ 
 /** 
  * Class A 包含Class B的引用----->背景二 
  */ 
 private Button button; 
 
 @Override 
 public void onCreate(Bundle savedInstanceState) { 
  super.onCreate(savedInstanceState); 
  setContentView(R.layout.activity_main); 
  button = (Button)findViewById(R.id.button1); 
   
  /** 
   * Class A 调用View的方法,而Button extends View----->A类调用B类的某个方法 C 
   */ 
  button.setOnClickListener(this); 
 } 
 
 /** 
  * 用户点击Button时调用的回调函数,你可以做你要做的事 
  * 这里我做的是用Toast提示OnClick 
  */ 
 @Override 
 public void onClick(View v) { 
  Toast.makeText(getApplication(), "OnClick", Toast.LENGTH_LONG).show(); 
 } 
 
}
Nach dem Login kopieren
Dieses Beispiel ist der typische Rückrufmechanismus von Haben Sie nach der Lektüre von Android ein besseres Verständnis für den Rückrufmechanismus? Thread run() ist auch eine Rückrufmethode. Wenn die start()-Methode von Thread ausgeführt wird, wird die run()-Methode auch klassischer für die Verarbeitung von Nachrichten usw. verwendet >[Verwandte Empfehlungen]

1.
/** 
 * 这个View就相当于B类 
 * @author xiaanming 
 * 
 */ 
public class View implements Drawable.Callback, KeyEvent.Callback, AccessibilityEventSource { 
 /** 
  * Listener used to dispatch click events. 
  * This field should be made private, so it is hidden from the SDK. 
  * {@hide} 
  */ 
 protected OnClickListener mOnClickListener; 
  
 /** 
  * setOnClickListener()的参数是OnClickListener接口------>背景三 
  * Register a callback to be invoked when this view is clicked. If this view is not 
  * clickable, it becomes clickable. 
  * 
  * @param l The callback that will run 
  * 
  * @see #setClickable(boolean) 
  */ 
  
 public void setOnClickListener(OnClickListener l) { 
  if (!isClickable()) { 
   setClickable(true); 
  } 
  mOnClickListener = l; 
 } 
  
  
 /** 
  * Call this view&#39;s OnClickListener, if it is defined. 
  * 
  * @return True there was an assigned OnClickListener that was called, false 
  *   otherwise is returned. 
  */ 
 public boolean performClick() { 
  sendAccessibilityEvent(AccessibilityEvent.TYPE_VIEW_CLICKED); 
 
  if (mOnClickListener != null) { 
   playSoundEffect(SoundEffectConstants.CLICK); 
    
   //这个不就是相当于B类调用A类的某个方法D,这个D就是所谓的回调方法咯 
   mOnClickListener.onClick(this); 
   return true; 
  } 
 
  return false; 
 } 
}
Nach dem Login kopieren
Java Kostenloses Video-Tutorial


2.

Alibaba Java Development Manual

3 🎜>Geek Academy Java Video-Tutorial

Das obige ist der detaillierte Inhalt vonDetaillierte Code-Erklärung des Rückrufmechanismus. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage