作者: 夏至,欢饮转载,也请保留这段申明
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. 图->有向无环图->拓扑排序

    文字描述 关于有向无环图的基础定义: 一个无环的有向图称为有向无环图,简称DAG图(directed acycline graph).DAG图是一类较有向树更一般的特殊有向图. 举个例子说明有向无环图 ...

  2. Fiddler_内置命令行_03

    Fiddler左下角有一个命令框  [基础命令] [举例说明] ? 回车之后,匹配的内容如下图 stop [断点命令] FIddler断点功能就是将请求截获下来,但是不发送,这个时候你可以干很多事情, ...

  3. 在docker中使用mysql数据库,在局域网访问

    1.获取mysql镜像 docker pull mysql:5.6 注意:此处之所以获取mysql5.6是因为mysql5.7在centos7中启动可能会报错 2.查看镜像列表 docker imag ...

  4. PostgreSQL 自动输入密码(转)

    原文:https://www.cnblogs.com/litmmp/p/5122534.html 在 Shell 命令行中,使用 postgresql-client 连接 PostgreSQL 数据库 ...

  5. 6、LwIP协议规范翻译——缓冲及内存管理

    6.缓冲及内存管理 在一个通信系统中,内存缓冲管理系统必须容纳各种大小的缓冲数据,其范围从包含具有数百个字节的数据的全尺寸TCP段到只有几个字节的短ICMP回复包.此外,为了避免拷贝,应该让数据内容缓 ...

  6. docker+kafka+zookeeper+zipkin的安装

    1. 启动zookeeper容器 docker search zookeeper docker pull wurstmeister/zookeeper docker run -d --name zoo ...

  7. 搭建sftp

    参考:https://www.cnblogs.com/heyanan/p/8178480.html 需要注意两点:1.链接时候选择sftp不要选择ftp 2.目录权限严格按照参考文章设置

  8. python进阶之 进程&线程区别

    1.进程创建方式 import time import os from multiprocessing import Process def func (): time.sleep(1) print( ...

  9. 使用jfreechart生成柱状图、折线图、和饼状图

    JFreeChart是JAVA平台上的一个开放的图表绘制类库.它完全使用JAVA语言编写,是为applications, applets, servlets 以及JSP等使用所设计.下面我就详细介绍如 ...

  10. Java并发——Fork/Join框架与ForkJoinPool

    为了防止无良网站的爬虫抓取文章,特此标识,转载请注明文章出处.LaplaceDemon/ShiJiaqi. http://www.cnblogs.com/shijiaqi1066/p/4631466. ...