作者: 夏至,欢饮转载,也请保留这段申明
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. Linux Input子系统

    先贴代码: //input.c int input_register_handler(struct input_handler *handler) { //此处省略很多代码 list_for_each ...

  2. alias用法

    echo 'alias msfconsole="pushd $HOME/git/metasploit-framework && ./msfconsole && ...

  3. Linux平台 Oracle 18c RAC安装Part2:GI配置

    三.GI(Grid Infrastructure)安装 3.1 解压GI的安装包 3.2 安装配置Xmanager软件 3.3 共享存储LUN的赋权 3.4 使用Xmanager图形化界面配置GI 3 ...

  4. day04 一个简单的代码优化案例

    import random punches = ['石头','剪刀','布'] computer_choice = random.choice(punches) user_choice = input ...

  5. IRC 打字交流

    kali 里面用 apt-get install weechat 安装完成后,输入 weechat 命令就能启动客户端了 要想使用 IRC,就需要先连接一个 irc 服务器,选择了大名鼎鼎的 chat ...

  6. 3D印表機 零件採購資訊

    3D印表機 零件採購資訊 採購資訊僅供參考,零件的品質由店家擔保! 壓克力 螺絲螺帽牙條 高來螺絲 滑套.軸承 五連軸承 掏寶-廣發軸承 光軸 掏寶-廣發軸承 彈簧 雅銅彈簧 鐵氟龍製品 馬達 電源供 ...

  7. 利用ueditor保存到mysql数据库时出现乱码

    首先反复检查页面的字符编码,发现使用的都是 utf-8,再次检查数据库编码格式也用的是UTF-8.用format函数进行格式化,还是不起作用,最用把出现乱码的字段的数据类型由BLOB改成MEDIUMT ...

  8. 20190402Linux高级命令进阶(week1_day2

    Linux高级命令进阶(week1_day2) 输出重定向 场景:一般命令的输出都会显示在终端中,有些时候需要将一些命令的执行结果想要保存到文件中进行后续的分析/统计,则这时候需要使用到的输出重定向技 ...

  9. Flutter路由跳转及参数传递

    本文要介绍的知识点 用路由推出一个新页面 打开新页面时,传入参数 参数的回传 路由 做Android/iOS原生开发的时候,要打开一个新的页面,你得知道你的目标页面对象,然后初始化一个Intent或者 ...

  10. ubuntu kylin18 安装NVIDIA驱动

    这几天装系统快被折腾死了,事情的起因是这样的. 这件事情发生之前那两天一直在调试oled屏幕.我自己做转接板,1.3寸30针fpc的接口. 由于没有使用fpc专用转接座子,导致焊接特别困难,索性最后牺 ...