Home Java javaTutorial Detailed code explanation of callback mechanism

Detailed code explanation of callback mechanism

May 11, 2017 am 09:25 AM

This article mainly introduces the relevant information about the detailed explanation of java callback mechanism examples. Friends who need it can refer to it

Detailed explanation of java callback mechanism examples

I didn’t understand it before What is a callback? I hear people talking about adding a callback method every day, and I wonder, what is a callback method? Then I searched and searched on the Internet. I searched a lot but didn't understand it very well. Now I know, the so-called callback: it means that class A calls a certain method C in class B, and then class B in turn calls a method C in class A. Method D. This method D is called the callback method. If you look like this, you may feel a little dizzy. In fact, I didn’t understand it at the beginning either. I read what others said about the more classic callback method:

  • Class A implements interface CallBack callback——Background 1

  • class A Contains a reference to class B b ——Background 2

  • class B has a method f(CallBack callback) with a parameter of callback — —Background 3

  • A’s objecta calls B’s method f (CallBack callback) ——Class A calls someone of class B Method C

  • Then b can call A's method in the f (CallBack callback) method - class B calls a certain method of class A D

Everyone likes to use the example of making a phone call. Well, in order to keep up with the times, I will also use this example. My example uses asynchronous plus callback

One day Xiao Wang met a It was a difficult question. The question was "1 + 1 = ?", so I called Xiao Li and asked him. Xiao Li didn't know it at all, so he told Xiao Wang that he would think about the answer after I finish the things at hand. , Xiao Wang would not stupidly hold the phone and wait for Xiao Li's answer, so Xiao Wang said to Xiao Li, I still want to go shopping. If you know the answer, call me and tell me, so he hung up the phone. , do your own thing. After an hour, Xiao Li called Xiao Wang and told him that the answer was 2

/** 
 * 这是一个回调接口 
 * @author xiaanming 
 * 
 */ 
public interface CallBack { 
 /** 
  * 这个是小李知道答案时要调用的函数告诉小王,也就是回调函数 
  * @param result 是答案 
  */ 
 public void solve(String result); 
}
Copy after login
/** 
 * 这个是小王 
 * @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); 
 } 
  
}
Copy after login
/** 
 * 这个就是小李啦 
 * @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);  
 } 
}
Copy after login
/** 
 * 测试类 
 * @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 = ?"); 
 } 
}
Copy after login

Have you almost understood the callback mechanism through the above example? The above is An asynchronous callback, let's take a look at the synchronous callback, onClick() method
Now let's analyze the click method onclick() of Android View; we know that onclick() is A callback method, this method is executed when the user clicks the View. Let’s use Button as an example.

//这个是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); 
}
Copy after login
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(); 
 } 
 
}
Copy after login

The following is the setOnClickListener method of the View class, which is equivalent to Class B. Only the key code is posted.

/** 
 * 这个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; 
 } 
}
Copy after login

This example is the typical callback mechanism of Android. After reading this, do you have a better understanding of the callback mechanism? Thread run() is also a callback method. When the start() method of Thread is executed, the run() method will be called back. It is also more classic to process messages, etc.

[Related recommendations]

1. Java Free Video Tutorial

2. Alibaba Java Development Manual

3. Geek Academy Java Video tutorial

The above is the detailed content of Detailed code explanation of callback mechanism. For more information, please follow other related articles on the PHP Chinese website!

Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn

Hot AI Tools

Undresser.AI Undress

Undresser.AI Undress

AI-powered app for creating realistic nude photos

AI Clothes Remover

AI Clothes Remover

Online AI tool for removing clothes from photos.

Undress AI Tool

Undress AI Tool

Undress images for free

Clothoff.io

Clothoff.io

AI clothes remover

Video Face Swap

Video Face Swap

Swap faces in any video effortlessly with our completely free AI face swap tool!

Hot Tools

Notepad++7.3.1

Notepad++7.3.1

Easy-to-use and free code editor

SublimeText3 Chinese version

SublimeText3 Chinese version

Chinese version, very easy to use

Zend Studio 13.0.1

Zend Studio 13.0.1

Powerful PHP integrated development environment

Dreamweaver CS6

Dreamweaver CS6

Visual web development tools

SublimeText3 Mac version

SublimeText3 Mac version

God-level code editing software (SublimeText3)

Break or return from Java 8 stream forEach? Break or return from Java 8 stream forEach? Feb 07, 2025 pm 12:09 PM

Java 8 introduces the Stream API, providing a powerful and expressive way to process data collections. However, a common question when using Stream is: How to break or return from a forEach operation? Traditional loops allow for early interruption or return, but Stream's forEach method does not directly support this method. This article will explain the reasons and explore alternative methods for implementing premature termination in Stream processing systems. Further reading: Java Stream API improvements Understand Stream forEach The forEach method is a terminal operation that performs one operation on each element in the Stream. Its design intention is

PHP: A Key Language for Web Development PHP: A Key Language for Web Development Apr 13, 2025 am 12:08 AM

PHP is a scripting language widely used on the server side, especially suitable for web development. 1.PHP can embed HTML, process HTTP requests and responses, and supports a variety of databases. 2.PHP is used to generate dynamic web content, process form data, access databases, etc., with strong community support and open source resources. 3. PHP is an interpreted language, and the execution process includes lexical analysis, grammatical analysis, compilation and execution. 4.PHP can be combined with MySQL for advanced applications such as user registration systems. 5. When debugging PHP, you can use functions such as error_reporting() and var_dump(). 6. Optimize PHP code to use caching mechanisms, optimize database queries and use built-in functions. 7

PHP vs. Python: Understanding the Differences PHP vs. Python: Understanding the Differences Apr 11, 2025 am 12:15 AM

PHP and Python each have their own advantages, and the choice should be based on project requirements. 1.PHP is suitable for web development, with simple syntax and high execution efficiency. 2. Python is suitable for data science and machine learning, with concise syntax and rich libraries.

PHP vs. Other Languages: A Comparison PHP vs. Other Languages: A Comparison Apr 13, 2025 am 12:19 AM

PHP is suitable for web development, especially in rapid development and processing dynamic content, but is not good at data science and enterprise-level applications. Compared with Python, PHP has more advantages in web development, but is not as good as Python in the field of data science; compared with Java, PHP performs worse in enterprise-level applications, but is more flexible in web development; compared with JavaScript, PHP is more concise in back-end development, but is not as good as JavaScript in front-end development.

PHP vs. Python: Core Features and Functionality PHP vs. Python: Core Features and Functionality Apr 13, 2025 am 12:16 AM

PHP and Python each have their own advantages and are suitable for different scenarios. 1.PHP is suitable for web development and provides built-in web servers and rich function libraries. 2. Python is suitable for data science and machine learning, with concise syntax and a powerful standard library. When choosing, it should be decided based on project requirements.

Java Program to Find the Volume of Capsule Java Program to Find the Volume of Capsule Feb 07, 2025 am 11:37 AM

Capsules are three-dimensional geometric figures, composed of a cylinder and a hemisphere at both ends. The volume of the capsule can be calculated by adding the volume of the cylinder and the volume of the hemisphere at both ends. This tutorial will discuss how to calculate the volume of a given capsule in Java using different methods. Capsule volume formula The formula for capsule volume is as follows: Capsule volume = Cylindrical volume Volume Two hemisphere volume in, r: The radius of the hemisphere. h: The height of the cylinder (excluding the hemisphere). Example 1 enter Radius = 5 units Height = 10 units Output Volume = 1570.8 cubic units explain Calculate volume using formula: Volume = π × r2 × h (4

PHP: The Foundation of Many Websites PHP: The Foundation of Many Websites Apr 13, 2025 am 12:07 AM

The reasons why PHP is the preferred technology stack for many websites include its ease of use, strong community support, and widespread use. 1) Easy to learn and use, suitable for beginners. 2) Have a huge developer community and rich resources. 3) Widely used in WordPress, Drupal and other platforms. 4) Integrate tightly with web servers to simplify development deployment.

PHP's Impact: Web Development and Beyond PHP's Impact: Web Development and Beyond Apr 18, 2025 am 12:10 AM

PHPhassignificantlyimpactedwebdevelopmentandextendsbeyondit.1)ItpowersmajorplatformslikeWordPressandexcelsindatabaseinteractions.2)PHP'sadaptabilityallowsittoscaleforlargeapplicationsusingframeworkslikeLaravel.3)Beyondweb,PHPisusedincommand-linescrip

See all articles