Android中的callback是什么?
我想了解callback的概念。 我在互联网上search了callback,并且有很多使用接口的例子,一个类正在使用这个接口调用另一个类的方法。 但是我仍然无法得到callback的主要概念,使用callback的目的是什么?
这是一个很好的教程 ,它很好地描述了callback和用例。
callback的概念是,如果在另一个类中的某些工作完成,则通知类同步/asynchronous。 有人称之为好莱坞原则:“不要打电话给我们,我们打电话给你”。
这是一个例子:
class A implements ICallback { MyObject o; B b = new B(this, someParameter); @Override public void callback(MyObject o){ this.o = o; } } class B { ICallback ic; B(ICallback ic, someParameter){ this.ic = ic; } new Thread(new Runnable(){ public void run(){ // some calculation ic.callback(myObject) } }).start(); } interface ICallback(){ public void callback(MyObject o); }
A类调用B类来在线程中完成一些工作。 如果线程完成了这个工作,它将通知A类callback并提供结果。 所以没有必要投票或什么的。 只要可用,您将得到结果。
在Androidcallback中,在活动和片段之间使用。 由于片段应该是模块化的,你可以在片段中定义一个callback来调用活动中的方法。
您先创build一个接口,然后定义一个方法,它将作为callback。 在这个例子中,我们将有两个类,一个classA和另一个classB
接口:
public interface OnCustomEventListener{ public void onEvent(); //method, which can have parameters }
在classB中的监听器本身(我们只在classB中设置监听器)
private OnCustomEventListener mListener; //listener field //setting the listener public void setCustomEventListener(OnCustomEventListener eventListener) { this.mListener=eventListener; }
在Aclass,我们如何开始听课,不pipeBclass要讲什么
classB.setCustomEventListener(new OnCustomEventListener(){ public void onEvent(){ //do whatever you want to do when the event is performed. } });
我们如何从classB触发事件(例如按下button)
if(this.mListener!=null){ this.mListener.onEvent(); }
PS您的自定义侦听器可以有任意数量的参数
资源
callback在Java中可能非常有用。
使用callback函数,您可以通知另一个exception操作类,该exception操作已成功完成或发生错误。
这是之前讨论的。
在计算机编程中,callback函数是一段可执行代码,作为parameter passing给其他代码,预计在某个方便的时候callback(执行)参数。 这个调用可能是在同步callback中立即发生的,也可能是在以后的时间发生的,就像在asynchronouscallback中一样。
CallBack Interface
用于Fragment
在Android的Fragment
通信。
请参阅此处了解您的理解。
我在以下情况下使用:在UI中,我得到了一个button的动作,例如。 用户想要下载一个500MB的文件。 谢谢我将初始化后台引擎(AsyncTask类)并传递参数给他。 在用户界面上,我将显示阻止进度对话框,并禁止用户进行任何其他点击。 问题是:何时从UI中删除阻止? 答案是:引擎成功或失败时,可以通过callback或通知。
通知和callback有什么区别,这是另外一个问题,但1:1是更快的callback。
- 如何解决android.os.DeadObjectException android x
- 在TextureView上播放video
- Android Studio渲染问题:无法find以下类
- ListView:与LinkMovementMethod的TextView使列表项不可点击?
- SlidingTabLayout以适应屏幕
- 错误:ConnectionResult {statusCode = INTERNAL_ERROR,resolution = null}
- 如何避免始终从Google云端硬盘加载caching的应用数据
- 如何为谷歌地图api v2设置默认位置和缩放级别?
- 如何用系统签名签署Android应用程序?