安卓中的回调函数是什么?

23
在Android应用程序开发中,我经常在许多地方看到单词"CallBack"。我想知道它在技术上的意义 - 以及如何在应用程序中使用回调。我需要一份指南来理解并使用它。
3个回答

17

我想知道它的意思,从技术上告诉我们

http://en.wikipedia.org/wiki/Callback_%28computer_science%29

在没有函数参数值的面向对象编程语言(如Java)中,可以通过传递抽象类或接口来模拟回调,在此期间接收方将调用一个或多个方法,而调用端提供具体实现。这些对象有效地是一组回调和它们需要操作的数据。它们有助于实现各种设计模式,如Visitor,Observer和Strategy。

我如何管理应用程序的回调?

我不知道这是什么意思。


抱歉我的英语不好,马克。无论如何,你做得很对。 - Praveen
清晰的解释 - Kartiikeya

6

嗯。举个例子,你在C语言中编写了一个快速排序算法。想要使用你的算法的用户必须提供适合与你的算法一起排序的比较方法。用户必须将指向用户比较方法的函数指针传递给你的快速排序代码。快速排序代码使用这个地址,也就是函数指针,来回调用户的比较函数。你提供了一个函数原型,但没有实现,因为你不可能知道如何确定正在排序的内容的顺序。用户提供了与正在排序的内容相匹配的比较实现,这个实现必须与函数原型相匹配。函数指针被快速排序算法用来回到并触及用户代码。

这实际上是关于多态性的。

在Java中,您可以使用接口来实现这一点。因此,对于排序,请参见接口IComparer和IComparable。


5

Callable接口可以像Runnable一样用来运行一段代码。然而,Callable可以返回结果并且可以抛出已检查的异常。

更多细节请参考: http://developer.android.com/reference/java/util/concurrent/Callable.html

通过使用Callable接口,您可以将参数作为函数传递。下面是一个简单的代码片段以便理解:

public class MainActivity<V> extends Activity {


    Callable<String> doLogin=null;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        doLogin=new Callable<String>() {  //created but not called now.

            @Override
            public String call() throws Exception {

                //make some piece of code
                return "something"; //or false
            }
        };

        CheckSession checkSession=new CheckSession("sessionName");
        String sessionKey="";


        try {  //we are sending callable to the DAO or any class we want 
             sessionKey=checkSession.getSessionKey(doLogin);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}



public class CheckSession{


    String sessionName="";
    Callable<String> func=null;

    public CheckSession(String sessionName) {
        super();
        this.sessionName = sessionName;

    }

    public String getSessionKey(Callable<String> doLogin) throws Exception{

        func=doLogin;

        return (String) func.call();

    }

}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接