CallBack是回调的意思,熟悉Windows编程的人对"回调函数"这四个字一定不会陌生,但是Java程序员对它可能就不太了解了。"回调函数"或者"回调方法"是软件设计与开发中一个非常重要的概念,掌握"回调函数"的思想对程序员来说(不管用哪种语言)是非常必要的。
那么什么是回调函数呢?我认为,回调函数就是预留给系统调用的函数,而且我们往往知道该函数被调用的时机。这里有两点需要注意:第一点,我们写回调函数不是给自己调用的,而是准备给系统在将来某一时刻调用的;第二点,我们应该知道系统在什么情形下会调用我们写的回调函数。
这里举个现实生活中"回调函数"的例子来帮助大家更好的理解。我们平时考试答题的第一件事是干嘛?没错,是写上学号和姓名。这里注意了,我们填写学号和姓名不是给自己看的(即该方法不是给自己调用的),而是给老师登记分数时看的(预留给系统将来调用),这其实就是一个回调的应用。
下面再来看一下Android中应用到"回调"的场景。
场景一:
Button button = (Button)this.findViewById(R.id.button);
button.setOnClickListener(new Button.OnClickListener() {
//回调函数
@override
publicvoid onClick(View v) {
buttonTextView.setText("按钮被点击了");
}
});
上面的代码给按钮加了一个事件监听器,这其实就是"回调"最常见的应用场景之一。我们自己不会显示地去调用onClick方法。用户触发了该按钮的点击事件后,它会由Android系统来自动调用。
场景二:
@Override
publicvoid onCreate(Bundle saveInstanceState) {
super.onCreate(saveInstanceState);
// You code...
}
@Override
publicvoid onResume() {
super.onResume();
// You code...
}
上面的方法大家就更熟悉了,这是Android系统在Activity类中设置的回调函数,在Activity生命周期的不同阶段,Android系统会自动调用相应的方法(onCreate, onPause, onResume,onDestroy等等)
以上是两个Android中用到"回调"的场景,他们的代码实现可能不同,但是思想上是相近的,都是"回调"思想的体现。下面,我们在Java中分别模拟这两个场景。
首先模拟注册事件监听器。先写一个监听器接口
package com.listener;
/**
* 点击监听器接口
* @author CodingMyWorld
*
*/
publicinterface MyOnClickListener {
publicvoid onClick();
}
然后写一个我们自己的Button类
package com.listener;
publicclass MyButton {
private MyOnClickListener listener;
/**
* 设置具体点击监听器
* @param listener 点击监听器实现类
*/
publicvoid setOnClickListener(MyOnClickListener listener) {
this.listener = listener;
}
/**
* 按钮被点击
*/
publicvoid doClick() {
listener.onClick();
}
}
最后模拟Client端的注册监听器和触发点击操作。
package com.listener;
publicclass Client {
publicstaticvoid main(String[] args) {
MyButton button =new MyButton();
//注册监听器
button.setOnClickListener(new MyOnClickListener() {
@Override
publicvoid onClick() {
System.out.println("按钮被点击了");
}
});
//模拟用户点击
button.doClick();
}
}
以上就是"回调"思想在Java中事件监听的运用,我们再模拟第二个场景,"回调"在activity生命周期方法调用的体现。由于比较简单,我就不多做解释了,大家直接看代码。
package com.activity;
publicabstractclass Activity {
protectedvoid onCreate() {
System.out.println("创建准备~~~~~~~");
}
protectedvoid onDestroy() {
System.out.println("销毁准备~~~~~~~~");
}
}
package com.activity;
publicclass ConcreteActivity extends Activity {
@Override
protectedvoid onCreate() {
super.onCreate();
System.out.println("创建中!!!");
}
@Override
protectedvoid onDestroy() {
super.onDestroy();
System.out.println("销毁中!!!");
}
}
package com.activity;
publicclass Client {
publicstaticvoid main(String[] args) {
Activity activity =new ConcreteActivity();
activity.onCreate();
activity.onDestroy();
}
}
OK,我对CallBack的理解就谈到这,有不对和能改进的地方也希望大家指正,多多交流。
相关推荐
本文将深入探讨如何通过自定义Dialog来理解接口回调(callback)机制,这在进行Android应用开发时是非常重要的一项技能。 首先,让我们了解什么是自定义Dialog。在Android系统中,Dialog是一种半透明的窗口,用于...
在Android开发中,Java Native Interface (JNI) 是一个至关重要的工具,它允许Java代码与本地(C/C++)代码交互。本示例着重探讨如何从Android JNI层回调到Java层,这对于实现性能优化、利用现有C/C++库或处理特定...
"hello-jniCallback"是一个常见的示例项目,用于演示如何在Android应用中使用JNI来调用C/C++代码,并实现回调机制。这个项目可以帮助开发者理解JNI的基本用法以及如何在Java和原生代码之间传递数据。 1. **JNI基础...
在Android开发中,回调(Callback)机制是一种常用的设计模式,它允许一个对象在特定事件发生时通知另一个对象。在这个场景中,“Activity_Callback.rar_Callback android_activity Callback_android”标题提及的...
在Android开发中,JNI(Java Native Interface)是一个关键的...通过理解并实践这个“JniCallback.zip”中的示例,开发者可以更好地掌握JNI回调的用法,从而在实际项目中灵活地使用这一功能,提高应用的效率和功能。
描述中的"读取Android源码所得"提示我们,这个示例可能来源于对Android操作系统源代码的学习和理解。Android系统的很多组件,如BroadcastReceiver、Loader、AsyncTask等,都使用了回调机制来处理事件或异步任务的...
在Android开发中,JNI(Java Native Interface)是一个关键的技术,它允许Java代码和其他语言写的代码进行交互。JNI在处理性能敏感的任务,如图形渲染...理解并熟练运用这些技术,将有助于提升Android应用的性能和质量。
在Android开发中,网络请求是应用与服务器交互的重要环节。OkGo是一款非常流行的网络库,它基于OkHttp进行了二次封装,提供了简洁、高效、易用的API,广泛应用于众多Android项目中。本篇文章将详细介绍OkGo的最新...
首先,我们需要理解什么是接口(Interface):在Java中,接口是定义行为的蓝图,包含一系列抽象方法。这些方法没有具体实现,由实现接口的类来填充具体代码。在Android中,接口常用于跨组件通信,因为它可以确保调用...
所有已实现的接口: Drawable.Callback, KeyEvent.Callback, ViewTreeObserver.OnPreDrawListener, Checkable Android API中文文档常见问题 如果打开是一片空白的情况; 点击解除锁定,确定即可。
回调(Callback)是编程中一个重要的概念,尤其是在异步编程中。回调函数是一种将功能作为参数传递给另一个函数,以便在特定事件发生或任务完成后执行的编程技术。回调的使用可以解决程序执行顺序的问题,特别是在...
总的来说,通过OkHttpUtils对OkHttp的封装,可以更方便地在Android应用中进行网络请求,同时保证Callback方法在UI线程执行,避免了因网络操作导致的ANR(Application Not Responding)问题。在实际开发中,根据项目...
在Android App的适当位置,如按钮点击事件中,调用`callJniMethod()`并传入实现`JniCallback`接口的对象,例如`MainActivity`实例自身: ```java public void onClick(View v) { callJniMethod(this); } ``` 5. ...
- 首先,`CallBackDemo`可能包含一个接口,例如命名为`Callback`,接口中定义了一个或多个回调方法,如`onSuccess()`和`onFailure()`。 - 接下来,`CallBackDemo`可能有一个或多个类实现了`Callback`接口,这些类是...
在IT领域,尤其是在Java和Android开发中,回调(Callback)是一种常见的编程机制,它允许一个对象在特定事件发生时通知另一个对象。回调是异步编程的关键组成部分,使得开发者能够处理程序执行过程中的某些阶段,...
1. **捕获Surface内容**:由于`SurfaceView`的绘制不在主线程,我们需要在Surface的回调函数`SurfaceHolder.Callback`的`surfaceChanged()`或`surfaceCreated()`中捕获绘制内容。可以创建一个`Bitmap`对象,然后使用...
在Android应用开发中,Google Maps API是一个非常重要的工具,它允许开发者在应用程序中集成地图功能。本主题将深入探讨如何利用Google Maps API在Android中绘制从一个地址到另一个地址的路线图,以及如何设定不同的...
- **异步处理**:例如在Android开发中,当我们需要在网络请求完成后更新UI,可以将一个回调接口传递给网络请求函数,网络请求完成后调用这个接口的方法。 - **事件驱动编程**:当一个事件发生时,回调函数会被触发...
在Android应用开发中,数据的存储和访问是至关重要的部分,...理解并掌握这些知识点,对于Android应用开发中的数据管理至关重要。通过实践和不断学习,开发者可以更加熟练地运用SQLite来构建高效、稳定的应用程序。
在Android开发中,JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,它使得人和机器都能容易地读取和编写数据。由于其简洁和高效,JSON已经成为网络上最常用的数据交换格式之一,尤其在移动应用开发...