Метод обратного вызова Android - PullRequest
0 голосов
/ 09 февраля 2019

Я прочитал много ответов и рекомендованных книг, но я не понимаю термин «методы обратного вызова».Например, onCreate () - это метод обратного вызова.Может кто-нибудь объяснить форму царапины.Спасибо.

Ответы [ 2 ]

0 голосов
/ 09 февраля 2019

Крис , представьте, что у вас есть функция:

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 {
    ...
}

Именование не измеряет, просто используется для упрощения ответа.

0 голосов
/ 09 февраля 2019

Вот ответ от geeksforgeeks

Цитата:

// Java-программа для иллюстрации синхронного обратного вызова

interface OnGeekEventListener { 

    // this can be any type of method 
    void onGeekEvent(); 
} 

class 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 
} 

Вывод:

Выполнение обратного вызова перед синхронным заданием Выполнение обратного вызова после синхронного задания Асинхронный обратный вызов

Асинхронный вызов не выполняетсязаблокировать программу от выполнения кода.когда вызов возвращается из события, вызов возвращается к функции обратного вызова.Таким образом, в контексте Java мы должны создать новый поток, вызвать метод обратного вызова внутри этого потока.Обратный вызов может быть вызван из потока, но не является обязательным.Callback может также запустить новый поток, делая себя асинхронным.

Ниже приведена простая реализация этого принципала.

filter_none edit play_arrow

bright_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 
} 

Вывод:

Выполнение операции в асинхронном задании Выполнение обратного вызова после асинхронногоЗадача

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...