聊聊Android中那些无处不在的回调

声明:eoe文章著作权属于作者,受法律保护,转载时请务必以超链接形式附带如下信息

原文作者: hoolang

原文地址: http://my.eoe.cn/appadventure/archive/3456.html


对于刚刚接触Android开发的同学来说,也许第一个要面对的东西可能就是回调了。你可能会说:哪有,我第一个面对的是各种控件。是的,没错。但学控件最重要的就是回调——还记得你当时第一次写setOnClickListener的感觉么?当时是不是以为这就是固定写法,不知道其中的缘由。


其实这个方法就是为控件设置回调实现,你传入的接口实现就是当Button被点击的时候,Button控件要执行的操作。因为点击Button后,需要什么操作是Android框架所不知道的,所以框架需要提前将接口准备好,需要我们来实现,因为我们是清楚点击Button的目的的是什么的。我们实现后将其通过setOnClickListener——框架预先为我们提供的一种把我们的具体的需求告诉控件的方式——传递给控件类。然后控件在检测到用户一定的操作(如果点击、双击等等)后直接回调我们实现的方法。


通过上面的分析,你也许已经意识到了回调方法的特点——由系统调用的,而不是你去调用,你的任务是实现。实现和调用可不是一回事。

回调还有什么特点?想想Button是如何调用onClick回调方法的,是当用户点击Button了之后。所以也可以看出回调方法的执行时机是不确定的,当需要时调用。所以它也不会阻塞UI线程,不像网络操作之类。


Android中还有哪些地方用到了回调——Hander,也是一个典型。你去实现Handler的Callback接口,然后传给Handler,Handler就可以安装你所希望的方式去处理消息了。它与Button的回调不同的是一个通过set方法传入,一个通过构造方法传入。


以上算是比较容易理解的回调,还有一种回调,它的回调方法有多个而且互相关联。你问我说的哪个?——LoaderManager类有一个方法initLoader,这个方法的其中一个参数是接口类型的。你需要去实现这个接口,然后通过initLoader方法传入,然后initLoader方法内部几乎所有操作全部是由传入的接口实现来执行。包括用哪个加载器、加载完了做哪些操作、加载出错又如何?全部都在接口实现里面。


面向对象有一种说法是少用继承多用组合。上面所说这些回调就是很好的例子——组合。想想如果你不用组合而用继承的方式会发生什么呢?
每个按钮你都得写一个Button类的子类来实现特定功能。想想这是多么恐怖的事情。



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值