接口回调

在正式接触了Android开发半年后,我终于弄明白了接口回调的意义和用法,实在不容易,鼓掌(还是自己太菜了

先来介绍一下接口回调的意思,以及用处:

可以把使用某一接口的类创建的对象的引用赋给该接口声明的接口变量,那么该接口变量就可以调用被类实现的接口的方法。实际上,当接口变量调用被类实现的接口中的方法时,就是通知相应的对象调用接口的方法,这一过程称为对象功能的接口回调。

(我其实是不太愿意看这种官方话的讲解的,很难懂)

那咱们来由浅入深的来讲吧,先说一个生活中的例子。

如果工作中,学习中,我们压力过大,就需要宣泄,比如某一天,我想宣泄一下,但不知道应该做什么,怎么做(比如大喊,狂吃一顿,去蹦极,唱k等等)。然后我就跟我的哥们儿说 “ 嘿,哥们儿,我想宣泄一下,你帮我制定个计划呗 ”。哥们儿说 “妥妥的,包在我身上”,然后哥们儿就去策划这个宣泄活动了,但这时候,我不会什么也不做,一直等到他完成计划为止,我该干什么干什么,直到某一时刻,哥们儿打了个电话过来,“ hey,bro,咱们现在去唱k吧,好好喊一喊”。我觉得,嗯~ nice,然后高高兴兴地跟着哥们儿去唱k了。完~
在这个例子中,“我想宣泄”是我主要想完成的事情, “让哥们儿去安排”是我开放出去的接口, “哥们儿安排完了,给我打电话”是接口的回调。大意是这样,可能比喻有不恰当的地方,大家多指正。

那么在代码中,它是什么样子呢,先来看看接口回调是如何实现的。(我觉得这个流程是十分重要的,先学会了流程,理解什么的在你用熟了之后自然就了解了)

(由于条件限制,只能用截图了,代码并不多)
(这里以自定义控件为例,自定义控件里面开放出一个接口,供用户自行调用,布局界面就是linearlayout里面放一个button,略了)

  1. 定义接口,定义抽象方法。接口可以单独定义,也可以定义在类里面,均可(这个接口就是要开放出去的那个接口,即例子中 ‘宣泄’ 这个事)
  2. android 如何在task中使用回调 android接口的回调_接口

  3. 定义自定义控件类,构造方法,加载布局(需要用到接口的类,即例子中需要需宣泄的我)
  4. android 如何在task中使用回调 android接口的回调_控件_02

  5. 在类中定义接口类型的变量
  6. android 如何在task中使用回调 android接口的回调_接口_03

  7. 在类中写该变量的set方法
  8. android 如何在task中使用回调 android接口的回调_控件_04

  9. 在该类中定义一个方法,这个方法写法比较固定,如图所示,先记住。if(接口!= null){接口对象 . 接口里的方法}
    (这个方法,就是要把接口开放出去的具体操作。在例子中,就是我给哥们儿打电话这步操作)
  10. android 如何在task中使用回调 android接口的回调_控件_05

  11. 在需要用到该方法的地方调用该方法(无论我们做什么操作,我们的目的始终是,在这个类中,我想调用一个方法,但我不知道这个方法具体要干什么,所以我把这个方法交给用户,让用户自行决定。我认为就是接口回调的核心思想。这里我是想在构造方法中调用callbackbutton方法,但这方法里面具体干什么,交给用户决定。)
  12. android 如何在task中使用回调 android接口的回调_回调方法_06

  13. 在用到该控件的地方,调用之前定义的set方法(我这个是在一个activity中调用的,具体目的就是弹出一句’成功调用控件‘,这里toast就是例子中,哥们儿给我回电话让我跟他一起唱k。一般打出前几个字母,后面就会自动联想出来。)
  14. android 如何在task中使用回调 android接口的回调_接口回调_07

  15. 到此为止,接口回调的使用方式就介绍完了,我用到的其中一个用处就是: 我有一个控件,我里面有一个地方需要根据不同机型做不同操作,为了不破坏控件的完整性,不在控件里面做机型适配(要不然其他地方用到这个控件,这个机型适配可能会对其有影响。),所以我开放了一个接口出去,用户可以自行在控件外面对控件进行更改,而不破坏控件的完整性,用户如果不调用,就有一个默认值,调用了就按用户写的走,完美~把决定权交给用户。
    而且,在多人共同开发代码时,接口回调也是一个十分重要的存在,能让多人协同开发,把接口开放出去,自己就可以进行下面的操作,自由,不用等着别人,耽误自己的进度。
    接口回调的用途十分广泛,之前我一直没学会这个东西,它都快成为我的心结了,让我耽误了很多进度,现在希望我能在学会之后看懂更多代码,尽快成长起来。

分割线

==============================================================================

进一步总结一下回调(现在我对回调又有了新的认识):
总共涉及到的就三个类:接口,实现回调方法的类,开放回调接口的类。
接口不必说,就一个抽象方法
开放回调接口的类,这个类里的东西稍微多一点点。创建了接口对象,有一个传递进来接口对象的方法,有一个使用到该接口的地方。我们要做的就是:当接口对象不为空的时候,调用这个方法。
实现回调方法的类,正常就是写具体接口方法里要做什么事情而已。
总的来说就三件事:调用接口方法;把接口方法给出去,让别人实现;另一个人来实现这个方法。