作者: 夏至,欢饮转载,也请保留这段申明
http://blog.csdn.net/u011418943/article/details/60139910

一般我们在不同的应用传递数据,比较方便的是用广播和回调函数,当然还有其他方式,这里学学回调函数的使用;
什么是回调函数呢?在C/C++中,因为我们有指针这个东西,所以传递数据什么的,挺方便,把那个指针地址发过来,改一下地址里面的值即可即可;但是Java中是没有指针这个概念的,所以,这个回调函数则是用一个interface 接口和内部类实现的。
而实用回调函数的好处在于,可以很方便的监听到某个类的状态,常用的是监听一个下载任务的进度和下载状态等等。
首先,先定义一个共有接口:

public interface myCallBack {
public void fail(int error,String msg);
}
ok,我们定义了一个接口,那怎么使用呢?首先先思考一下,假如我有两个类,b和c,我想在b类中监听c类的fail这种状态;那我只要把b类的实例给c,c实现方法就可以了。
ok,那么我们在c类中,实现方法

public class myc {

public void test(int error,myCallBack mycallback){
if (error ==1 ){
mycallback.fail(1,"测试得到: "+1);
}else{
mycallback.fail(0,"没有得到1");
}
}
}
然后,我们在b类中,实例化c类,然后我们的 myCallBack 实例传递过去

new myc().test(1, new myCallBack() {
@Override
public void fail(int error, String msg) {
Log.d(TAG, "fail: "+msg);
}
});
打印如下:

zsr: fail: 测试得到: 1
1
2
在服务中心回到结果:
有时候,我们需要这种需求,比如一个下载任务,我们在服务中开启了下载任务,我们需要在 MainActivity 去监听下载任务的进度和下载状态等一些信息,但是我们启动这个callback是在服务的,那怎么办?
很简单,只要把 MainAcivity 的callback 实例给服务就可以了,但是不是用 inputextra 的方式:

public class myb extends Service{
@Override
public IBinder onBind(Intent intent) {
return null;
}
private myCallBack myCallBack = MainActivity.myCallBack;
@Override
public int onStartCommand(Intent intent, int flags, int startId) {

new myc().test(0,myCallBack ); //把开启这个服务的 callback 实例传递过来
return super.onStartCommand(intent, flags, startId);
}
}
这样,我们就可以在 MainActivity 中监听c类中的状态了:

public static myCallBack myCallBack = new myCallBack(){
@Override
public void fail(int error, String msg) {
Toast.makeText(mContext, msg, Toast.LENGTH_SHORT).show();
}
};
---------------------
作者:夏至的稻穗
来源:CSDN
原文:https://blog.csdn.net/u011418943/article/details/60139910
版权声明:本文为博主原创文章,转载请附上博文链接!

Android 回调函数的理解,实用简单(回调函数其实是为传递数据)的更多相关文章

  1. TypeScript 中函数的理解?与 JavaScript 函数的区别?

    一.是什么 函数是JavaScript 应用程序的基础,帮助我们实现抽象层.模拟类.信息隐藏和模块 在TypeScript 里,虽然已经支持类.命名空间和模块,但函数仍然是主要定义行为的方式,Type ...

  2. 【Unity Shader】二、顶点函数(vertex)和片元函数(fragment)传递数据,及各阶段可使用的语义(semantic)

    学习资料:http://www.sikiedu.com/course/37/task/433/show 本节学习目标: 学习Shader中结构体struct的使用. 学习在片元函数(vertex)和顶 ...

  3. 【Android 复习】 : Activity之间传递数据的几种方式

    在Android开发中,我们通常需要在不同的Activity之间传递数据,下面我们就来总结一下在Activity之间数据传递的几种方式. 1. 使用Intent来传递数据 Intent表示意图,很多时 ...

  4. android中使用Intent在activity之间传递数据

    android中intent传递数据的简单使用: 1.使用intent传递数据: 首先将需要传递的数据放入到intent中 Intent intent = new Intent(MainActivit ...

  5. js回调函数(callback)理解

    Mark! js学习 不喜欢js,但是喜欢jquery,不解释. 自学jquery的时候,看到一英文词(Callback),顿时背部隐隐冒冷汗.迅速google之,发现原来中文翻译成回调.也就是回调函 ...

  6. 关于js的callback回调函数的理解

    回调函数的处理逻辑理解:所谓的回调函数处理逻辑,其实就是先将回调函数的代码 冻结(或者理解为闲置),接着将这个回调函数的代码放到回调函数管理器的队列里面. 待回调函数被触发调用的时候,对应的回调函数的 ...

  7. js回调函数的理解

    js回调函数(callback)理解 Mark! 讲之前说一句 function say(){ alert(,,,,,,,,) } var say=function (){ alert(,,,,,,, ...

  8. 转·带你用实例理解C语言回调函数

    原文出处:https://segmentfault.com/a/1190000008293902?utm_source=tag-newest 前言: 如不懂函数指针,请先查阅关于函数指针内容的资料(h ...

  9. C++回调函数的理解与使用

    一.回调函数就是一个通过函数指针调用的函数.如果你把函数的指针(地址)作为参数传递给另一个函数,当这个指针被用来调用其所指向的函数时,我们就说这是回调函数.回调函数不是由该函数的实现方直接调用,而是在 ...

随机推荐

  1. Ubuntu系统启动后停在(initramfs)

    问题 今天我在启动虚拟机过程 遇到莫名其妙的问题,启动不了.如下图.提示某个文件系统错误了.例如我的就是 /dev/mapper/vagrant--vg-root . 上面问题 可把我急坏了,以为虚拟 ...

  2. Django-- KindEditor 富文本编辑器使用

    KindEditor是一款还不错的开源的HTML可视化编辑器,主要用于让用户在网站上获得所见即所得编辑效果,兼容IE.Firefox.Chrome.Safari.Opera等主流浏览器.之所以推荐这一 ...

  3. mybatis BindingException: Invalid bound statement (not found)

    错误截图 解决措施 此异常的原因是由于mapper接口编译后在同一个目录下没有找到mapper映射文件而出现的. 通常我们在配置SqlSessionFactory时会有如配置 <!-- 配置Sq ...

  4. 官方Canvas API文档

    https://developer.mozilla.org/zh-CN/docs/Web/API/Canvas_API

  5. python框架之Django(11)-中间件

    介绍 在django中,中间件其实就是一个类,在一个请求到来和这个请求结束之前,django会根据自己的规则在合适的时机执行中间件中相应的方法. 在django项目的settings模块中,有一个 M ...

  6. mysql /tmp目录爆满问题的处理

    mysql /tmp目录爆满问题的处理 突然收到zabbix告警,说mysql服务器的/目录磁盘空间不足. 登录到服务器,看了下发现100GB的根目录,居然使用了差不多90GB.这台服务器上只跑了一个 ...

  7. 【LeetCode每天一题】Jump Game II(跳跃游戏II)

    Given an array of non-negative integers, you are initially positioned at the first index of the arra ...

  8. Python压缩指定文件及文件夹为zip

    Python压缩指定的文件及文件夹为.zip 代码: def zipDir(dirpath,outFullName): """ 压缩指定文件夹 :param dirpat ...

  9. 原生js实现分页效果(带实例)

    小小插件(静态分页) 效果图: 首先实现简单功能: <!DOCTYPE html> <html> <head> <meta http-equiv=" ...

  10. Unity中实现人物平滑转身

    using UnityEngine; public class PlayerController : MonoBehaviour { ; ; ; void Update() { hor = Input ...