Android中的回调?

问题描述 投票:17回答:3

在Android应用程序开发中,我经常在许多地方使用CallBack这个词。我想知道在技术上告诉我们意味着什么 - 以及我如何设法在应用程序中使用callback。我需要一个指南来理解它并使用它。

android android-emulator
3个回答
15
投票

我想知道它意味着什么,请在技术上告诉我们

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

“在没有函数值参数的面向对象编程语言中,如Java,[callbacks]可以通过传递一个抽象类或接口来模拟,接收器将调用一个或多个方法,而调用端提供一个具体的实现这些对象实际上是一组回调,加上他们需要操作的数据。它们可用于实现各种设计模式,例如访问者,观察者和策略。“

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

我不知道这是什么意思。


6
投票

嗯。一个例子怎么样?您在C中编写了一个快速排序算法。想要使用您的算法的用户必须提供适合用户使用您的算法排序的比较方法。用户必须将用户比较方法的函数指针传递给快速排序代码。快速排序代码使用此地址(函数指针)来CALL返回用户的比较功能。你提供了一个函数原型,没有实现,因为你不可能知道如何确定正在排序的内容的正常性。用户提供比较的实现,这对用户正在排序的内容有意义。此实现必须与函数原型匹配。快速排序算法使用函数指针来返回并触摸用户的代码。

这实际上是关于多态的。

在java中,您可以使用接口来执行此操作。因此,有关排序,请参阅IComparer和IComparable接口。


4
投票

可调用接口可用于运行一段代码,如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();

    }

}
© www.soinside.com 2019 - 2024. All rights reserved.