我已经阅读了许多答案并推荐了书籍,但我不理解“回调方法”一词。例如, onCreate()是一种回调方法。谁能解释表格的草稿。 谢谢。
答案 0 :(得分:0)
引用文字:
//用于说明同步回调的Java程序
interface OnGeekEventListener {
// this can be any type of method
void onGeekEvent();
}
B类{
private OnGeekEventListener mListener; // listener field
// setting the listener
public void registerOnGeekEventListener(OnGeekEventListener mListener)
{
this.mListener = mListener;
}
// my synchronous task
public void doGeekStuff()
{
// perform any operation
System.out.println("Performing callback before synchronous Task");
// check if listener is registered.
if (this.mListener != null) {
// invoke the callback method of class A
mListener.onGeekEvent();
}
}
// Driver Function
public static void main(String[] args)
{
B obj = new B();
OnGeekEventListener mListener = new A();
obj.registerOnGeekEventListener(mListener);
obj.doGeekStuff();
}
}
class A implements OnGeekEventListener {
@Override
public void onGeekEvent()
{
System.out.println("Performing callback after synchronous Task");
// perform some routine operation
}
// some class A methods
}
输出:
在同步Task之前执行回调 同步任务后执行回调 异步回调
异步调用不会阻止程序执行代码。当调用从事件返回时,调用将返回到回调函数。因此,在java的上下文中,我们必须创建一个新线程来调用该线程内部的回调方法。回调可以从线程中调用,但不是必需的。回调也可能启动一个新线程,从而使它们自己成为异步线程。
下面是此主体的简单实现。
filter_none 编辑 play_arrow
亮度_4 //用于说明异步回调的Java程序
interface OnGeekEventListener {
// this can be any type of method
void onGeekEvent();
}
B类{
private OnGeekEventListener mListener; // listener field
// setting the listener
public void registerOnGeekEventListener(OnGeekEventListener mListener)
{
this.mListener = mListener;
}
// My Asynchronous task
public void doGeekStuff()
{
// An Async task always executes in new thread
new Thread(new Runnable() {
public void run()
{
// perform any operation
System.out.println("Performing operation in Asynchronous Task");
// check if listener is registered.
if (mListener != null) {
// invoke the callback method of class A
mListener.onGeekEvent();
}
}
}).start();
}
// Driver Program
public static void main(String[] args)
{
B obj = new B();
OnGeekEventListener mListener = new A();
obj.registerOnGeekEventListener(mListener);
obj.doGeekStuff();
}
}
class A implements OnGeekEventListener {
@Override
public void onGeekEvent()
{
System.out.println("Performing callback after Asynchronous Task");
// perform some routine operation
}
// some class A methods
}
输出:
在异步任务中执行操作 异步任务后执行回调
答案 1 :(得分:0)
Chris ,想象一下您有一个功能:
fun test() {
...
}
然后,您决定向其中添加一些魔术。例如,添加可以在功能test
完成其工作之后执行的“块”。因此,这里我们需要在代码中添加一些额外内容:
interface CallbackInterface {
fun doJob()
}
和您的爱好变成:
fun test(block: CallbackInterface) {
...
block.doJob()
}
因此您可以像这样调用test
函数(或将CallbackInterface
传递到test
函数中):
test(object: CallbackInterface {
override fun doJob() {
...
}
})
一般来说,重点是将接口作为函数中的参数传递,并在需要时调用它,然后在另一端执行对结果的任何操作。
或者在Kotlin中您可以这样做:
fun test(block: ()-> Unit) {
...
block.invoke()
}
test {
...
}
命名不会计量,只是用于简化答案。