Android Callback的使用

 

转载自Linux社区 ,作者:Iceshow0428

此作者写于2012-12-08,讲的很通俗易懂,因此收藏起来,以备之后使用,当然,这只是一个最简单的回调使用,后续再自行编写些复杂的回调使用。

个人觉得回调就像多态一样,比如Boss叫员工去吃饭,但每个员工可能吃不同的食物。只不过,回调是对接口而言。简单来说就是,A对象调用了自己的方法a,方法a接收的参数是B接口的实例b,而在方法a中将执行接口B中的方法c。这样解释可能有点绕不过来,下面我们来看一个例子。

比如宿舍的某个同学设置了一个闹铃,闹铃响时全宿舍的人都能听到,但是张三比较勤奋,听到铃声后起床了,李四比较懒,听到铃声后还要睡会。我们可以把闹铃发出的铃声看作是接口,张三和李四都实现了这个“接口”,闹铃到一定时间后就要“响铃”,响铃就要发出“铃声”,“铃声”就去叫人,至于人会做什么就是人本身的事情。下面看个代码。

1.接口CallPerson

  1. publicinterface CallPerson {
  2. publicabstractvoid doCallPerson ();
  3. }

定义了一个“叫人”的方法。实现这个接口可理解成安装了闹铃。

2.类Zhangsan

  1. publicclass Zhangsan implements CallPerson {
  2. String name = "Zhangsan";
  3. public String getName () {
  4. return name;
  5. }
  6. @Override
  7. publicvoid doCallPerson() {
  8. System.out.println(getName() + "听到铃声,勤鸟,起床了!");
  9. }
  10. }

3.类Lisi

  1. publicclass Lisi implements CallPerson {
  2. String name = "Lisi";
  3. public String getName () {
  4. return name;
  5. }
  6. @Override
  7. publicvoid doCallPerson() {
  8. System.out.println(getName() + "听到铃声,懒猪,没起床!");
  9. }
  10. }

4.类Alarm

  1. publicclass Alarm {
  2. //响铃 
  3. publicvoid ring (CallPerson callPerson) {
  4. callPerson.doCallPerson();
  5. }
  6. }

5.Activity

然后我们在Activity里模拟闹铃开始响铃

  1. import android.os.Bundle;
  2. import android.app.Activity;
  3. publicclass MainActivity extends Activity {
  4. @Override
  5. publicvoid onCreate(Bundle savedInstanceState) {
  6. super.onCreate(savedInstanceState);
  7. setContentView(R.layout.layout_main);
  8. Alarm alarm = new Alarm();
  9. Zhangsan zhangsan = new Zhangsan();
  10. Lisi lisi = new Lisi();
  11. //模拟闹铃定时时间到,然后响铃
  12. alarm.ring(zhangsan);
  13. alarm.ring(lisi);
  14. }
  15. }

最后,我们来看看执行的结果

  1. 12-07 21:49:41.947: INFO/System.out(6107): Zhangsan听到铃声,勤鸟,起床了!
  2. 12-07 21:49:41.947: INFO/System.out(6107): Lisi听到铃声,懒猪,没起床!

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。