android中的回调?

Pra*_*een 17 android android-emulator

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

Com*_*are 15

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

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

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

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

我不知道这是什么意思.


JAL*_*JAL 6

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

这实际上是关于多态的.

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


hus*_*yin 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();

    }

}
Run Code Online (Sandbox Code Playgroud)