java中怎么使用callback函数
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java中怎么使用callback函数相关的知识,希望对你有一定的参考价值。
在很多场景,作为开发都会想到,在执行完毕一个任务的时候,能执行一个callback函数是多么好的事情。现在模拟一下这个情景:
定义三个类。分别是主函数类。callback函数的接口类。业务处理类。在业务处理类中,处理完业务之后,执行一个callback函数。
[java] view plain copy
package comz;
public class Main
public static void main(String[] args)
new TestCallBack().compute(1000, new ComputeCallBack()
@Override
public void onComputeEnd()
System.out.println("end back!!!");
);
这是主函数类。new了一个业务处理类来处理逻辑,并在处理完毕之后,执行callback函数。
[java] view plain copy
package comz;
public class TestCallBack
public void compute(int n, ComputeCallBack callback)
for (int i = 0; i < n; i++)
System.out.println(i);
callback.onComputeEnd();
这是业务处理类。仅仅输出一些数字,然后执行回调函数。
[java] view plain copy
package comz;
public interface ComputeCallBack
public void onComputeEnd();
这是回调函数的接口。
--------------------------------------
运行上面的代码,就会在输出结束的时候调用在Main里面的callback函数,输出System.out.println("end back!!!");
--------------------------------------
这里的原理是:
在主类中,新建业务类的时候,传递进去的第二个参数是一个实现了回调接口的匿名类对象。
在业务类中,我们调用了这个对象的onComputeEnd方法。在执行onComputeEnd的时候,jvm会找到这个对象的函数实现并调用。于是就输出了end back!!! 参考技术A 场景一:
复制代码
Button button = (Button)this.findViewById(R.id.button);
button.setOnClickListener(new Button.OnClickListener()
//回调函数
@override
publicvoid onClick(View v)
buttonTextView.setText("按钮被点击了");
);
复制代码
上面的代码给按钮加了一个事件监听器,这其实就是"回调"最常见的应用场景之一。我们自己不会显示地去调用onClick方法。用户触发了该按钮的点击事件后,它会由android系统来自动调用。
场景二:
复制代码
@Override
publicvoid onCreate(Bundle saveInstanceState)
super.onCreate(saveInstanceState);
// You code...
@Override
publicvoid onResume()
super.onResume();
// You code...
复制代码
上面的方法大家就更熟悉了,这是Android系统在Activity类中设置的回调函数,在Activity生命周期的不同阶段,Android系统会自动调用相应的方法(onCreate, onPause, onResume,onDestroy等等)
以上是两个Android中用到"回调"的场景,他们的代码实现可能不同,但是思想上是相近的,都是"回调"思想的体现。下面,我们在Java中分别模拟这两个场景。
首先模拟注册事件监听器。先写一个监听器接口
复制代码
package com.listener;
/**
* 点击监听器接口
* @author CodingMyWorld
*
*/
publicinterface MyOnClickListener
publicvoid onClick();
复制代码
然后写一个我们自己的Button类
复制代码
package com.listener;
publicclass MyButton
private MyOnClickListener listener;
/**
* 设置具体点击监听器
* @param listener 点击监听器实现类
*/
publicvoid setOnClickListener(MyOnClickListener listener)
this.listener = listener;
/**
* 按钮被点击
*/
publicvoid doClick()
listener.onClick();
复制代码
最后模拟Client端的注册监听器和触发点击操作。
复制代码
package com.listener;
publicclass Client
publicstaticvoid main(String[] args)
MyButton button =new MyButton();
//注册监听器
button.setOnClickListener(new MyOnClickListener()
@Override
publicvoid onClick()
System.out.println("按钮被点击了");
);
//模拟用户点击
button.doClick();
复制代码
以上就是"回调"思想在Java中事件监听的运用,我们再模拟第二个场景,"回调"在activity生命周期方法调用的体现。由于比较简单,我就不多做解释了,大家直接看代码。
复制代码
package com.activity;
publicabstractclass Activity
protectedvoid onCreate()
System.out.println("创建准备~~~~~~~");
protectedvoid onDestroy()
System.out.println("销毁准备~~~~~~~~");
复制代码
复制代码
package com.activity;
publicclass ConcreteActivity extends Activity
@Override
protectedvoid onCreate()
super.onCreate();
System.out.println("创建中!!!");
@Override
protectedvoid onDestroy()
super.onDestroy();
System.out.println("销毁中!!!");
复制代码
复制代码
package com.activity;
publicclass Client
publicstaticvoid main(String[] args)
Activity activity =new ConcreteActivity();
activity.onCreate();
activity.onDestroy();
参考技术B 1、定义连接工厂使用
2、定义回调函数的接口
3、定义使用回调函数的测试类
以上是关于java中怎么使用callback函数的主要内容,如果未能解决你的问题,请参考以下文章