Android 关于回调的一点总结
2016-08-13 14:36
204 查看
<pre name="code" class="java">上班以来的半个月,接触的代码里出现次数较多的就是 回调函数 自己在这之前并没有接触过这种函数,所以在网上找到了一些文章,讲的还是蛮形象的
一、建模
我理解的接口回调就是,我这个类实现了一个接口里的方法doSomething,然后注册到你这里,然后我就去做别的事情去了,你在某个触发的时机回头来调用我doSomething的方法。好比,我给你打电话问某个难题,你电话里想不出来,于是说等想到了再回我电话第一步 定义接口:
interface ContactInterface { public void callBackByTel(String answer); }
第二步 我得先打电话(注册)到你那,告诉你我的问题是什么 所以 你那里必须有个方法 让我告诉你问题相关事宜(注册)。
public void setCallBack(String who,String question,ContactInterface callBack) { this.who = who; System.out.println("你说:当前联系到我的人是"+who+",问题是"+question); this.callBack =callBack; }第三步 当你想到问题的答案后,打电话告诉我答案,即回调 我传进来的方法
public void handleThings(){ //假如你现在正在想问题的答案,需要一点时间 for(int i=0;i<100000;i++){ if(i == 0){ System.out.println("你正在思考问题....."); } } String answer = "答案是A"; //想到问题的办法了 System.out.println("你说:想到答案了,准备打回去给"+who+"告诉他答案"); callBack.callBackByTel(answer); }
整个机制构成三要素就是:我(客户端),你(服务端),约定(接口)
我类:
public class Me { public static void main(String[] args){ Me me = new Me(); me.hasQuestion(); } private void hasQuestion(){ //现在有问题想不出来答案,想去问你 You you = new You(); you.setCallBack("蜗牛", "某道题答案是什么?", new ContactInterface() { @Override public void callBackByTel(String answer) { System.out.println("我说:嗯,好的,我收到答案了:"+answer+",谢谢"); } }); //你接到电话,起床开始思考问题 new Thread(you).start(); } }
你类
public class You implements Runnable{
private String who;
private ContactInterface callBack;
public You() {
// TODO Auto-generated constructor stub
}
//调用此方法就表示有人联系你了,注册到你这来
public void setCallBack(String who,String question,ContactInterface callBack) {
this.who = who;
System.out.println("你说:当前联系到我的人是"+who+",问题是"+question);
his.callBack =callBack;
}
public void handleThings(){ //假如你现在正在想问题的答案,需要一点时间 for(int i=0;i<100000;i++){ if(i == 0){ System.out.println("你正在思考问题....."); } } String answer = "答案是A"; //想到问题的办法了 System.out.println("你说:想到答案了,准备打回去给"+who+"告诉他答案"); callBack.callBackByTel(answer); }
/* (non-Javadoc)
* @see java.lang.Runnable#run()
*/
@Override
public void run() {
try {
Thread.sleep(1000);
handleThings();
} catch (Exception e) {
e.printStackTrace();
}
}
}
接口
public interface ContactInterface { public void callBackByTel(String answer); }
运行结果
总结起来,三个步骤如下
定义接口 Callback ,包含回调方法 callback();
服务端提供注册的方法,并设定在某个条件下会回调接口方法;
客户端提供接口的实现方法,并注册到服务端,把方法地址传进去。
事实上我一开始说没有接触过回调函数这句话是非常不正确的,我们每天接触的Button的点击事件,就是一个很典型的回调函数
实例(对于Android界面上Button点击事件监听的模拟):
1.定义接口 public interface OnClickListener { public void OnClick(Button b); } 2. 定义Button public class Button { OnClickListener listener; public void click() { listener.OnClick(this); } public void setOnClickListener(OnClickListener listener) { this.listener = listener; } } 3. 将接口对象OnClickListener 赋给 Button的接口成员 public class Activity { public Activity() { } public static void main(String[] args) { Button button = new Button(); button.setOnClickListener(new OnClickListener(){ @Override public void OnClick(Button b) { System.out.println("clicked"); } }); button.click(); //user click,System call button.click(); } }
相关文章推荐
- 关于android中gridview的一点总结
- 关于android 微信支付成功,但回调不成功问题总结
- 关于新建android项目时 appcompat_v7报错问题的一点总结
- 关于Android开发中JNI/NDK使用的一点总结
- 关于android来去电监控的一点总结
- 关于JAVA匿名内部类,回调,事件模式的一点讨论
- 关于DNN Module开发学习以来的一点总结
- 今天工作中关于下拉框的一点总结
- vs2005中关于masterpage,Theme,skin的一点总结
- 关于在applet中使用JDBC访问数据库的一点总结
- 关于.net中修饰符的一点总结
- 关于WebForm的编辑列ItemTemplate和EditItemTemplate的一点小总结
- 关于多线程的一点总结
- 关于c与汇编混合编程的一点总结
- 关于如何jar的一点总结
- 关于SYS_CONNECT_BY_PATH 的一点总结
- 关于JAVA匿名内部类,回调,事件模式的一点讨论
- 关于对xmms安装过程的一点总结!
- java和struts使用中的一点总结--关于写在页面上的select域的选项选中后保存状态的办法!
- 关于代码运行效率问题的一个总结和一点疑问