Java 回调方法Android

Java 回调方法Android,java,android,callback,Java,Android,Callback,我读过很多答案和参考书,但我不理解“回调方法”这个术语。例如,onCreate()是一种回调方法。谁能解释一下这一切。 谢谢。以下是来自 引文: //Java程序来说明同步回调 interface OnGeekEventListener { // this can be any type of method void onGeekEvent(); } interface OnGeekEventListener { // this can be any ty

我读过很多答案和参考书,但我不理解“回调方法”这个术语。例如,onCreate()是一种回调方法。谁能解释一下这一切。 谢谢。

以下是来自

引文:

//Java程序来说明同步回调

interface OnGeekEventListener { 

    // this can be any type of method 
    void onGeekEvent(); 
} 
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(); 
} 
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(); 
} 
}

输出:

在同步任务之前执行回调 同步任务后执行回调 异步回调

异步调用不会阻止程序执行代码。当调用从事件返回时,调用将返回回调函数。因此,在java上下文中,我们必须创建一个新线程,在该线程中调用回调方法。回调可以从线程调用,但不是必需的。回调还可能启动一个新线程,从而使其自身异步

下面是这个原则的简单实现

无过滤器 编辑 弹箭

亮度4 //说明异步回调的Java程序

interface OnGeekEventListener { 

    // this can be any type of method 
    void onGeekEvent(); 
} 
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(); 
} 
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(); 
} 
}

输出:

在异步任务中执行操作
在异步任务后执行回调时,假设您有一个函数:

fun测试(){
...
}
然后你决定给它添加一些魔力。例如,添加可以在函数
test
完成其工作后执行的“block”。因此,我们需要在代码中添加一些额外的内容:

接口回调接口{
有趣的工作
}
你的职能是:

fun测试(块:回调接口){
...
block.doJob()
}
因此,您可以像这样调用
test
函数(或者将
CallbackInterface
传递到
test
函数中):

test(对象:回调接口{
覆盖有趣的doJob(){
...
}
})
一般来说,关键是将接口作为函数中的参数传递,并随时调用它,在另一端对结果执行任何操作

或者在Kotlin,您可以这样做:

fun测试(块:()->单元){
...
block.invoke()//或仅block()
}
并使用它:

测试{
...
}

应该很容易找到一个回调函数,基本上回调函数只是一个代码块,您希望在其他函数之后调用它。正如@Erik所说,onCreate()只是一个生命周期方法。因此,这意味着onCreate()将在创建活动后“调用”。如果你有兴趣了解更多关于回调的信息,我在这里用按钮和@Erik lol来解释它,来自Android文档-->生命周期回调方法