关于JAVA中的listener回调机制,以及其在Android中的使用
来源:互联网 发布:手机淘宝咋退货退款 编辑:程序博客网 时间:2024/06/07 04:11
第一篇博客,献给我的舍友逼哥 @bigname22
博客:http://my.csdn.net/bigname22
在学习Android的过程中接触到了java的回调机制,比如按钮的监听回调,又比如开启一个子线程,在子线程完成任务的时候通知主线程.
其实JAVA的回调机制并不是非常高深的原理,不需要继承什么类. 只要有一点点接口interface和多线程Thread(只要了解就行)的知识,就能够学得会.
首先,java中的回调机制,是为了解决什么问题呢?
我认为是为了实现两个类之间的合作,和信息传递.
其中一个是主类,负责调用另外一个被调用类, 而另外一个类在完成了工作之后,重新调用主类.
打个现实中的比方:我是总经理,我手头上工作很多,突然我遇到一个比较耗费时间的问题,我当然不能自己解决.所以我打电话给了我一个员工,叫他去解决问题.并且告诉他我的电话一直开着,你解决的问题就马上打回来给我.
这在JAVA中的实现:
其中A是总经理 B是员工
1 定义一个接口 2 A调用B的方法并在参数中传入一个接口实现类实例 3 B中得到参数中的接口实现类实例,并执行完任务之后,调用接口实现类实例的方法.
这样子说你可能就懵逼了.不过在下面代码中我们将一步一步慢慢解析:
首先定义一个接口:
public interface Listener {public void finish(int result); //接口中唯一抽象函数,这里加不加abstract无所谓}
首先是总经理A
public class A {public void workOfA() {System.out.println("A遇到问题,赶紧开个了线程找B");new Thread(new Runnable() {//首先,我们在A工作中遇到问题时,开启了一个子线程@Override//在子线程中我们创建了一个B实例,并调用了B的方法,并在参数中传入了public void run() {//一个通过匿名内部类实现Listener接口的实例// TODO Auto-generated method stubB b = new B();b.workOfB(1, 2, new Listener() { // 这里创建一个匿名内部类实现了Listener接口,// 并且实现了Listener的方法,方法内容是// 当B完成任务之后 希望执行的代码.@Overridepublic void finish(int result) {// TODO Auto-generated method stubresolve(result);}});}}).start();}public void resolve(int x) {System.out.println("A我知道答案了:" + x);}}
然后是员工B
public class B {Listener listener;public void workOfB(int i, int j, Listener listener) {this.listener = listener;//员工B首先要取得这个listener接口实现类try {for (int c = 1; c <= 5; c++) {Thread.sleep(1000);//这里线程休眠了一会,模拟B的工作是要时间的System.out.println("B思考了" + c + "秒");}} catch (InterruptedException e) {// TODO Auto-generated catch blocke.printStackTrace();}int result = i + j;//这是工作主体,计算了传进来的i 和 j的和listener.finish(result);//工作完成之后呢,调用接口中的方法,而方法主体记得吗,就是在A中实现的方法.//这里为什么可以这么做,我觉得算是JAVA中多态的一种体现,我只管调用这个抽象函数,//而抽象函数的具体实现,由A自己来定义}}最后是我们的测试环节,在主函数Main中测试
public class Main {public static void main(String[] args) {// TODO Auto-generated method stubA a = new A();a.workOfA();}}
<pre name="code" class="java">最终结果::
A遇到问题,赶紧开了个线程交给BB思考了1秒B思考了2秒B思考了3秒B思考了4秒B思考了5秒A我知道答案了:3
本人初学者,有什么理解的不好的地方还望大神指出.
也希望更多的JAVA Android学习者一起交流.
1 0
- 关于JAVA中的listener回调机制,以及其在Android中的使用
- java回调机制以及android中的回调方法
- 关于Git GitLab 和以及在Android studio中的使用。
- Java回调机制在Android中的应用
- promise对象,以及其在Angular中的使用
- 浅谈接口回调以及在Android中的使用
- java以及android中的函数缺省机制
- Java&Android中的回调机制
- mongoDB 安装以及在Java中的使用
- Android Handler机制图解以及在实际中的运用
- java中的反射机制在android中的应用
- java中的监听器(listener)
- Java中的Listener监听器
- Java中的Listener 监听器
- 关于使用LruCache在Android中的缓存
- Java设计模式:观察者模式以及Servlet中的Listener
- 关于Android中的Parcel机制
- 关于Android中的Handler 机制
- css 框模型要点
- caffe make runtest 错误
- iOS水波纹动画详解
- LeetCode-141:Linked List Cycle
- Android中View转换为Bitmap及getDrawingCache=null的解决方法
- 关于JAVA中的listener回调机制,以及其在Android中的使用
- XML配置文件
- ERROR 1146 (42S02): Table 'voucherdb.fvr_vouchersummary' doesn't exist
- DB2数据库的学习及总结
- kth largest element in an array
- 反射生成对象 获得方法及构造器
- java中HashMap的用法
- 《TCP/IP卷》读书笔记
- poj 1990 MooFest(转化成树状数组求和)