【问题标题】:Callback in Android?Android中的回调?
【发布时间】:2010-04-02 13:30:48
【问题描述】:

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

【问题讨论】:

    标签: android android-emulator


    【解决方案1】:

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

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

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

    我如何管理回调 应用

    我不知道这是什么意思。

    【讨论】:

    • 对不起,我的英语最差了。无论如何,你做对了。
    • 明确说明
    【解决方案2】:

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

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

    在 java 中,您可以使用接口来执行此操作。所以关于排序,见接口IComparer和IComparable。

    【讨论】:

      【解决方案3】:

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

      了解更多详情。 http://developer.android.com/reference/java/util/concurrent/Callable.html

      通过使用 Callable 接口,您可以将参数作为函数传递,我添加了一个简单的代码 sn-p 以便理解。

      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();
      
          }
      
      }
      

      【讨论】:

        猜你喜欢
        • 2013-12-27
        • 1970-01-01
        • 1970-01-01
        • 2014-07-23
        • 2015-02-02
        • 2011-10-12
        • 1970-01-01
        • 1970-01-01
        • 2017-03-09
        相关资源
        最近更新 更多