2010-04-02 22 views
14

在android应用程序开发中,我经常在很多地方经历CallBack这个词。我想知道在技术上告诉我们的意义 - 以及我如何在应用程序中使用callback。我需要一个指导来了解它并使用它。在android中回调?

回答

13

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

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

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

我怎么能管理 应用程序的回调

我不知道这意味着什么。

+0

对不起,我最糟糕的英语再次mark.Anyway你做了正确的。 – Praveen 2010-04-02 13:44:21

+0

明确的解释 – 2016-12-09 05:44:55

5

嗯。举个例子。您使用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(); 

    } 

}