学了两三周的安卓了,最先开始是看mars老师的视频,看了一两天结合慕课网上的一些安卓视频,到现在算是有点入门了。
安卓立用得比较多的回调函数有点不明是怎么实现的,网上找了一些资料,结合自己的实践,总算有点明白了。
现在就把我自己对Java回调的理解写下来,以方便以后查阅。
比如我们执行一个方法的时候,Android系统就会帮我们调用oncreate()等方法,Android中有大量这样的情形。我们可以这样想,我们执行方法A的时候,系统
怎么就能够帮我们方法B了呢?这种肯定什么我们还没明白的地方。实际上很简单,只要我们在方法A里写上调用方法B,不就可以实现调用A的时候就自动调用B方
法了吗?下面我们就模拟这样一个场景,Jhno去打游戏的时候小明的妹妹Linda就会通知Dad说Jhon打游戏了。
先看目录结构:

先定义一个通知接口,interface ITongzhi,
package wyl.MoniAndroidCallback;
/**
* 谁要通知,谁就实现这个接口
* @author wyl
*
*/
public interface ITongzhi {
public void Tongzhi();
}
Linda.java
package wyl.MoniAndroidCallback;
/**
* linda要对弟弟进行举报,所以linda实现通知接口
*
* @author wyl
*/
public class Linda implements ITongzhi {
@Override
public void Tongzhi() {
System.out.println("Linda说:弟弟去打游戏了");
}
}
PlayGame.java,
package wyl.MoniAndroidCallback;
public class PlayGame {
String name;
ITongzhi tongzhizhe;
/**
* 打游戏的具体对象
*
* @param name
*/
public PlayGame(String name) {
this.name = name;
}
/**
* 如果实例化的时候不传入具体是谁在打游戏, 那么打游戏的具体对象就默认为Jhon
*/
public PlayGame() {
this.name = "Jhon";
}
/**
* 开始打游戏了,因为打游戏的时候就要通知, 所以在打游戏这个方法里我们就调用实习了
* ITongzhi这个接口的类的默认方法(这个默认方法即接口中定义的方法)
*/
public void Dayouxi() {
System.out.println(this.name + "正在打游戏");
tongzhizhe = new Linda();
tongzhizhe.Tongzhi();
}
}
Test.java ,测试类
package wyl.MoniAndroidCallback;
/**
* 测试类
*
* @author wyl
*
*/
public class Test {
public static void main(String[] args) {
/**
* 两个不同的构造器构造出来的方法,可以作为对比
*/
PlayGame p = new PlayGame("Tom");
PlayGame p2 = new PlayGame();
p.Dayouxi();
System.out.println("=========================");
p2.Dayouxi();
}
}
打印结果:
Tom正在打游戏 Linda说:弟弟去打游戏了 ========================= Jhon正在打游戏 Linda说:弟弟去打游戏了
实际上,Linda.java这个类,还可以进行改进,实现进一步的解耦。只要明白了这个例子,肯定就知道怎么进行解耦了。
原文:http://www.cnblogs.com/Sunnor/p/4735000.html