`
xixinfei
  • 浏览: 414164 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

android中CallBack的理解

 
阅读更多

谈谈我对Java中CallBack的理解

  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的理解就谈到这,有不对和能改进的地方也希望大家指正,多多交流。

分享到:
评论
1 楼 Alex_SHT_JAVA 2012-12-07  
写的还不错,简单易懂,3Q

相关推荐

    Android 通过自定义Dialog来理解接口回调callback

    本文将深入探讨如何通过自定义Dialog来理解接口回调(callback)机制,这在进行Android应用开发时是非常重要的一项技能。 首先,让我们了解什么是自定义Dialog。在Android系统中,Dialog是一种半透明的窗口,用于...

    Callback_Androidjni_AndoidJNI层到Java层的调用_android_android回调_

    在Android开发中,Java Native Interface (JNI) 是一个至关重要的工具,它允许Java代码与本地(C/C++)代码交互。本示例着重探讨如何从Android JNI层回调到Java层,这对于实现性能优化、利用现有C/C++库或处理特定...

    hello-jniCallback_jni_android_

    "hello-jniCallback"是一个常见的示例项目,用于演示如何在Android应用中使用JNI来调用C/C++代码,并实现回调机制。这个项目可以帮助开发者理解JNI的基本用法以及如何在Java和原生代码之间传递数据。 1. **JNI基础...

    Activity_Callback.rar_Callback android_activity Callback_android

    在Android开发中,回调(Callback)机制是一种常用的设计模式,它允许一个对象在特定事件发生时通知另一个对象。在这个场景中,“Activity_Callback.rar_Callback android_activity Callback_android”标题提及的...

    JniCallback.zip_Android jni_android_jni android_jni callback_jni

    在Android开发中,JNI(Java Native Interface)是一个关键的...通过理解并实践这个“JniCallback.zip”中的示例,开发者可以更好地掌握JNI回调的用法,从而在实际项目中灵活地使用这一功能,提高应用的效率和功能。

    callBackExample

    描述中的"读取Android源码所得"提示我们,这个示例可能来源于对Android操作系统源代码的学习和理解。Android系统的很多组件,如BroadcastReceiver、Loader、AsyncTask等,都使用了回调机制来处理事件或异步任务的...

    Android JNI多线程编程回调JAVA函数

    在Android开发中,JNI(Java Native Interface)是一个关键的技术,它允许Java代码和其他语言写的代码进行交互。JNI在处理性能敏感的任务,如图形渲染...理解并熟练运用这些技术,将有助于提升Android应用的性能和质量。

    Android okgo 最新流行网络封装各种类型返回泛型

    在Android开发中,网络请求是应用与服务器交互的重要环节。OkGo是一款非常流行的网络库,它基于OkHttp进行了二次封装,提供了简洁、高效、易用的API,广泛应用于众多Android项目中。本篇文章将详细介绍OkGo的最新...

    android 接口回调

    首先,我们需要理解什么是接口(Interface):在Java中,接口是定义行为的蓝图,包含一系列抽象方法。这些方法没有具体实现,由实现接口的类来填充具体代码。在Android中,接口常用于跨组件通信,因为它可以确保调用...

    Android API中文文档 v2017.zip

    所有已实现的接口: Drawable.Callback, KeyEvent.Callback, ViewTreeObserver.OnPreDrawListener, Checkable Android API中文文档常见问题 如果打开是一片空白的情况; 点击解除锁定,确定即可。

    CallBack回调

    回调(Callback)是编程中一个重要的概念,尤其是在异步编程中。回调函数是一种将功能作为参数传递给另一个函数,以便在特定事件发生或任务完成后执行的编程技术。回调的使用可以解决程序执行顺序的问题,特别是在...

    Android-OkHttpUtils最简单的okhttp封装CallBack方法执行在UI线程

    总的来说,通过OkHttpUtils对OkHttp的封装,可以更方便地在Android应用中进行网络请求,同时保证Callback方法在UI线程执行,避免了因网络操作导致的ANR(Application Not Responding)问题。在实际开发中,根据项目...

    Android APP 用interface 接口的形式对jni进行回调,实例测试

    在Android App的适当位置,如按钮点击事件中,调用`callJniMethod()`并传入实现`JniCallback`接口的对象,例如`MainActivity`实例自身: ```java public void onClick(View v) { callJniMethod(this); } ``` 5. ...

    CallBackDemo

    - 首先,`CallBackDemo`可能包含一个接口,例如命名为`Callback`,接口中定义了一个或多个回调方法,如`onSuccess()`和`onFailure()`。 - 接下来,`CallBackDemo`可能有一个或多个类实现了`Callback`接口,这些类是...

    java和android中的回调

    在IT领域,尤其是在Java和Android开发中,回调(Callback)是一种常见的编程机制,它允许一个对象在特定事件发生时通知另一个对象。回调是异步编程的关键组成部分,使得开发者能够处理程序执行过程中的某些阶段,...

    Android中SurfaceView截屏

    1. **捕获Surface内容**:由于`SurfaceView`的绘制不在主线程,我们需要在Surface的回调函数`SurfaceHolder.Callback`的`surfaceChanged()`或`surfaceCreated()`中捕获绘制内容。可以创建一个`Bitmap`对象,然后使用...

    Android中绘制线路图

    在Android应用开发中,Google Maps API是一个非常重要的工具,它允许开发者在应用程序中集成地图功能。本主题将深入探讨如何利用Google Maps API在Android中绘制从一个地址到另一个地址的路线图,以及如何设定不同的...

    java中Callback简单使用总结

    - **异步处理**:例如在Android开发中,当我们需要在网络请求完成后更新UI,可以将一个回调接口传递给网络请求函数,网络请求完成后调用这个接口的方法。 - **事件驱动编程**:当一个事件发生时,回调函数会被触发...

    Android学习09-----Android中数据的存储和访问 (3) By SQLite

    在Android应用开发中,数据的存储和访问是至关重要的部分,...理解并掌握这些知识点,对于Android应用开发中的数据管理至关重要。通过实践和不断学习,开发者可以更加熟练地运用SQLite来构建高效、稳定的应用程序。

    Android中Json数据解析

    在Android开发中,JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,它使得人和机器都能容易地读取和编写数据。由于其简洁和高效,JSON已经成为网络上最常用的数据交换格式之一,尤其在移动应用开发...

Global site tag (gtag.js) - Google Analytics