2010-04-02 31 views
14

Trong phát triển ứng dụng android, tôi thường xuyên đọc từ CallBack ở nhiều nơi. Tôi muốn biết những gì nó có nghĩa là để cho chúng tôi biết về mặt kỹ thuật - và làm thế nào tôi có thể quản lý để sử dụng callback trong các ứng dụng. Tôi cần một hướng dẫn để hiểu và sử dụng nó.gọi lại trong android?

Trả lời

13

tôi muốn biết ý nghĩa của nó, nói chúng tôi về mặt kỹ thuật

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

"Trong ngôn ngữ lập trình hướng đối tượng không có đối số chức năng có giá trị, chẳng hạn như Java, [callbacks] có thể được mô phỏng bằng cách truyền một lớp trừu tượng hoặc một giao diện, trong đó người nhận sẽ gọi một hoặc nhiều phương thức, trong khi đó đầu cuối gọi cung cấp một sự thực thi cụ thể. Các đối tượng như vậy là một gói các callback hiệu quả, cộng với dữ liệu mà chúng cần để thao tác. triển khai thiết kế khác nhau các mẫu như Visitor, Observer và Strategy. "

làm thế nào tôi có thể quản lý các cuộc gọi lại của ứng dụng

Tôi không có ý tưởng gì này có nghĩa.

+0

xin lỗi vì điều tồi tệ nhất của tôi Tiếng Anh một lần nữa. Dù sao bạn đã làm đúng. – Praveen

+0

Giải thích rõ ràng –

5

Hmm. Làm thế nào về một ví dụ. Bạn viết một thuật toán quicksort trong C. Người dùng muốn sử dụng thuật toán của bạn phải cung cấp một phương pháp so sánh phù hợp với những gì người dùng đang phân loại bằng thuật toán của bạn. Người dùng phải chuyển một con trỏ hàm tới phương thức so sánh của người dùng với mã quicksort của bạn. Mã quicksort sử dụng địa chỉ này, con trỏ hàm, để CALL BACK vào hàm so sánh của người dùng. Bạn cung cấp một nguyên mẫu hàm, không thực hiện, vì bạn không thể biết cách xác định thứ tự của những gì đang được sắp xếp. Người dùng cung cấp việc thực hiện so sánh có ý nghĩa cho những gì người dùng sắp xếp. Việc triển khai này phải khớp với nguyên mẫu hàm. Con trỏ hàm được sử dụng bởi alogorithm quicksort để quay lại và chạm vào mã của người dùng.

Điều này thực sự là về đa hình.

Trong java, bạn có thể sử dụng giao diện để thực hiện việc này. Vì vậy, để phân loại, hãy xem giao diện IComparer và IComparable.

5

Giao diện có thể gọi có thể được sử dụng để chạy một đoạn mã như Runnable. Tuy nhiên, Callable có thể trả về kết quả và có thể ném một ngoại lệ.

Để biết thêm chi tiết. http://developer.android.com/reference/java/util/concurrent/Callable.html

Bằng cách sử dụng Giao diện có thể gọi, bạn có thể chuyển đối số dưới dạng hàm Tôi đã thêm đoạn mã đơn giản để hiểu.

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

    } 

} 
Các vấn đề liên quan