`
crazysumer
  • 浏览: 49759 次
社区版块
存档分类
最新评论

【安卓笔记】回调

 
阅读更多

 
   
无奈身边没有一本可供参考的书(书到用时方恨少),网上看了一大堆,头疼之外也不知所言正确与否。在此理一下。

 

 

弄清楚下面几点:

 

1.回调函数是什么?

 

2.回调函数有什么作用?

 

3.回调函数怎样实现?

 

 

1.回调函数是什么?

 

先看wiki和百度百科

 

Wiki计算机程序设计中,回调函数,或简称回调Callback),是指通过函数参数传递到其它代码的,某一块可执行代码引用。这一设计允许了底层代码调用在高层定义的子程序

 

 

非常……高深的样子,简直让人望而却步

 

百度百科:回调函数就是一个通过函数指针调用的函数。如果你把函数的指针(地址)作为参数传递给另一个函数,当这个指针被用为调用它所指向的函数时,我们就说这是回调函数。回调函数不是由该函数的实现方直接调用,而是在特定的事件或条件发生时由另外的一方调用的,用于对该事件或条件进行响应。

 

 

嗯,这个比较人性化一点。相信wiki和百度百科还是有一定可信度的吧,只是,还是挺抽象的,那么继续

 

网上的这么一段解释,在很多地方看到

 

 

详细解释:
       
  客户程序C调用服务程序S中的某个函数A,然后S又在某个时候反过来调用C中的某个函数B,对于C来说,这个B便叫做回调函数。例如Win32下的窗口过程函数就是一个典型的回调函数。一般说来,C不会自己调用BC提供B的目的就是让S来调用它,而且是C不得不提供。由于S并不知道C提供的B姓甚名谁,所以S会约定B的接口规范(函数原型),然后由C提前通过S的一个函数R告诉S自己将要使用B函数,这个过程称为回调函数的注册,R称为注册函数。Web Service以及JavaRMI都用到回调机制,可以访问远程服务器程序。
下面举个通俗的例子:
       
  某天,我打电话向你请教问题,当然是个难题,^_^,你一时想不出解决方法,我又不能拿着电话在那里傻等,于是我们约定:等你想出办法后打手机通知我,这样,我就挂掉电话办其它事情去了。过了XX分钟,我的手机响了,你兴高采烈的说问题已经搞定,应该如此这般处理。故事到此结束。这个例子说明了异步+回调的编程模式。其中,你后来打手机告诉我结果便是一个回调过程;我的手机号码必须在以前告诉你,这便是注册回调函数;我的手机号码应该有效并且手机能够接收到你的呼叫,这是回调函数必须符合接口规范。

 

 

这个详细解释我可以这样翻译么?

 

   

 
                 

通俗解释很感人,但是我还没有跟具体的东东对上号,先看

 

 

 

2.回调函数有什么作用?

 

回调函数主要用于一些比较费时的操作,或响应不知道何时将会发生的事件,回调函数提供了一种异步的机制,相对于同步执行,提高了效率.

 

 

 

3.回调函数怎么实现?

 

1)定义一个回调函数的接口ICallback,里面有一些方法的申明

 

2)调用者Caller中声明一个 ICallback对象,并实现它(可在Caller中以内部类的形式,也可另行实现)

 

3)当特定条件或事件发生时,调用ICallback的实现中的函数,对事件进行处理。

 

   自定义的接口

public interface ICallback {
	public void sayHello();
	//do something else

}

 

   自定义接口的实现

public class Callee implements ICallback{

	@Override
	public void sayHello() {
		Log.d(Callee.class.getName(), "Callee: Hello World!");
	}
	//do something else
}

 调用者

public class Caller {
	private ICallback iCallback;

	public Caller() {
	}

	public Caller(ICallback iCallback) {
		this.iCallback = iCallback;
	}

	public void say1() {
		iCallback.sayHello();
	}

	public void say2() {
		Log.d(Caller.class.getName(), "just test");// can be printed
		new ICallback() {
			@Override
			public void sayHello() {
				Log.d(Caller.class.getName(),
						"Anonymous inner classes:Hello World!");// can not be
																// printed
			}
		};
	}

}

 

 

     Test

public class Test extends TestCase {
	public  void testCallback(){
		Caller c = new Caller();
		c.say2();
		
		Callee ce = new Callee();
		Caller c1 = new Caller(ce);
		c1.say1();
	}
}

 输出(匿名内部类方式没有输出?!Why?)

 

 

 

 

 

 

写在最后:

所以回调函数到底是什么呢?回调函数就是实现方不调用,而提供给别人(调用者)调用的函数,这一调用会在调用者的某个动作后触发

 Android很多回调函数,所以是这个意思吗?(在Activity上有一个按钮,给按钮添加点击事件)

 

所以上面那个详细解释其实应该这样翻译么?

 

 

 

 

Activity就是程序C,在Activity的onCreate方法中调用setOnClickListener这个注册函数,程序S暂且称他为系统,在调用onCreate方法后,监听就被注册了,当点击按钮时,就调用方法B,也就是onClick,进行处理

 

嗯,总感觉只看到调,没有一种回调的感觉,不是应该顾名思义么

 

参考:

http://heyshadow.blog.163.com/blog/static/57503343200842192115379/

 

http://www.cnblogs.com/babytrace/archive/2012/04/07/2437125.html

 

http://www.androidkaifa.com/thread-3677-1-1.html

 

 

  • 大小: 18 KB
  • 大小: 4.4 KB
  • 大小: 4.8 KB
  • 大小: 18 KB
  • 大小: 14.4 KB
分享到:
评论

相关推荐

    Android自学笔记-13-ContentObserver内容观察者

    当某个ContentProvider的数据发生变化时,如增删改数据,ContentObserver会接收到相应的通知,从而触发自定义的回调方法,使应用能够及时更新UI或执行其他相应操作。 1. **ContentObserver的注册与注销**: - 注册...

    黑马程序员安卓核心笔记

    事件处理是安卓应用交互的关键,笔记通过实例展示了如何监听用户操作,如点击事件,以及如何实现相应的回调函数。此外,还包括了触摸事件和手势识别的处理。 对于数据存储,笔记涵盖了Shared Preferences、SQLite...

    Android模拟串口与笔记本通信

    4. 接收数据:注册监听器,当有数据到来时,通过onDataReceived()回调函数接收数据。 5. 关闭串口:在完成通信后,必须关闭串口,释放资源。 在笔记本电脑端,通常使用串口通信软件,如Putty或CoolTerm,配置相应的...

    李兴华Android开发实战经典-PPT课件-笔记

    5. **网络编程**:讲解如何在Android应用中实现网络请求,如使用HttpURLConnection、OkHttp库,以及如何处理异步任务和网络回调。 6. **服务和服务绑定**:Android服务用于在后台执行长时间运行的任务,课程会介绍...

    Android开发教程笔记完全版.zip

    Activity和Fragment都有明确的生命周期,开发者需要理解各个状态及其对应的回调方法,以确保应用在不同场景下正常运行。 **IntentFilter和启动模式** IntentFilter允许其他应用启动你的Activity或Service,而启动...

    android app笔记

    ### Android App笔记 #### 一、Android概述 **Android** 是一种基于Linux内核的自由及开放源代码的操作系统,主要用于移动设备,如智能手机和平板电脑。它由Google公司和开放手机联盟领导及开发。虽然没有统一的...

    android界面开发笔记相关代码

    通过重写Activity的onCreate()方法,我们可以为组件设置监听器,如OnClickListener,当用户点击组件时触发相应的回调函数。 此外,Android提供了Fragment来处理多屏适配和复杂界面。Fragment是一个可嵌入到Activity...

    android笔记

    2. **迁移Activity回调**:当你在Activity中使用Fragment时,通常需要将Activity的部分回调逻辑转移到Fragment的相应回调中。例如,你可以将onCreate()的初始化逻辑移到Fragment的onCreate()中,将与视图创建相关的...

    android学习笔记2

    onCreate用于初始化设置,onStart和onResume使得Activity变为可见和运行状态,onPause和onStop分别表示Activity不再可见和停止,而onDestroy则是Activity被销毁前的回调。在Android系统内存不足时,处于onPause和...

    Android PreferenceActivity 学习笔记

    4. 处理用户交互:当用户在设置界面中进行选择时,可以通过重写Preference的onPreferenceChange()或onPreferenceClick()回调来响应用户操作。 在源码层面,PreferenceActivity会解析xml布局文件并创建相应的...

    Android开发教程笔记完全版

    事件处理和回调函数也是Android开发的重要部分。你将了解如何响应用户交互,如点击事件,并学会使用OnClickListener等接口。同时,笔记还会涉及异步操作,如AsyncTask和IntentService,这对于处理耗时任务和避免阻塞...

    《疯狂Android讲义》03章读书笔记(含源码)

    开发者可以通过实现或继承特定的接口,如OnClickListener、OnTouchListener,来注册事件监听器,并在对应的回调方法中编写处理逻辑。 4. **数据存储**:Android提供了多种数据存储方式,包括Shared Preferences...

    Android学习笔记——Http通信 源码

    在使用WebView时,开发者需要设置WebView的基本属性,如设置WebChromeClient和WebViewClient,这两个类分别处理网页加载过程中的各种回调事件,比如进度条显示、网页加载完成等。同时,为了安全考虑,还需要启用...

    Android学习笔记(十三) 碎片

    - **`onActivityResult()`**:碎片可以像活动一样处理`startActivityForResult()`,并接收`onActivityResult()`回调。 - **`setArguments(Bundle)`** 和 **`getArguments()`**:用于在碎片创建时传递数据。 - **`...

    Android面试笔记

    - 回调机制,如通过接口定义回调函数。 - 使用`EventBus`等发布订阅模式的库。 - 发送广播。 - 注册`ContentObserver`内容观察者。 - 将数据存储到本地文件后,Activity读取文件。 #### Handler机制 - **Handler的...

    xamarin学习笔记A18(安卓Service)

    Service简介,服务就是没有任何界面,不需要和用户直接打交道且需要长时间在后台运行的程序。例如手机中的音乐播放服务、天气更新服务和下载服务等。 服务运行在主线程中的,为了不让主线程阻塞,所以要在服务内部...

    Android笔记之 图片自由裁剪 DEMO

    本篇将详细探讨如何实现“Android笔记之图片自由裁剪DEMO”,并结合提供的`ImageCutDemo`来深入理解相关知识点。 1. **Intent选择图片** Android系统提供了Intent机制,用于启动系统服务或与其他应用程序进行交互...

    学习安卓的笔记

    包含`onPreExecute()`, `doInBackground()`, `onProgressUpdate()`, `onPostExecute()`等回调方法。 以上内容仅是安卓开发中的冰山一角,深入学习还包括事件监听、动画、自定义View、数据绑定、网络请求、数据库...

Global site tag (gtag.js) - Google Analytics