回调方法Android

时间:2019-02-09 12:19:21

标签: java android callback

我已经阅读了许多答案并推荐了书籍,但我不理解“回调方法”一词。例如, onCreate()是一种回调方法。谁能解释表格的草稿。 谢谢。

2 个答案:

答案 0 :(得分:0)

这是geeksforgeeks

的答案

引用文字:

//用于说明同步回调的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 {
    ...
}
  

命名不会计量,只是用于简化答案。