2013-08-05 26 views
53

Tôi muốn hiểu khái niệm gọi lại. Tôi đã tìm kiếm trên internet về callbacks và có rất nhiều ví dụ sử dụng giao diện, và một lớp đang gọi một phương thức của lớp khác bằng cách sử dụng giao diện đó. Nhưng tôi vẫn không thể có được khái niệm gọi lại chính, mục đích của việc sử dụng gọi lại là gì?Gọi lại trong Android là gì?

+0

Liên kết: http://developer.android.com/guide/faq/commontasks.html#implementcallbacks –

+0

Đây là cách triển khai lambdas trong Java vì chúng không được hỗ trợ cho đến khi Java 8. –

Trả lời

121

Đây là số tutorial đẹp, mô tả callbacks và trường hợp sử dụng tốt.

Khái niệm gọi lại là thông báo cho một lớp đồng bộ/không đồng bộ nếu một số công việc trong một lớp khác được thực hiện. Một số gọi nó là nguyên tắc Hollywood: "Đừng gọi chúng tôi, chúng tôi gọi cho bạn".

Dưới đây là một ví dụ:

class A implements ICallback { 
    MyObject o; 
    B b = new B(this, someParameter); 

    @Override 
    public void callback(MyObject o){ 
      this.o = o; 
    } 
} 

class B { 
    ICallback ic; 
    B(ICallback ic, someParameter){ 
     this.ic = ic; 
    } 

    new Thread(new Runnable(){ 
     public void run(){ 
      // some calculation 
      ic.callback(myObject) 
     } 
    }).start(); 
} 

interface ICallback(){ 
    public void callback(MyObject o); 
} 

Class A Class B gọi để có được một số công việc thực hiện trong một chủ đề. Nếu Thread hoàn thành công việc, nó sẽ thông báo cho Class A về việc gọi lại và cung cấp kết quả. Vì vậy, không cần phải bỏ phiếu hay gì đó. Bạn sẽ nhận được kết quả ngay khi chúng có sẵn.

Trong Android Callbacks được sử dụng f.e. giữa các hoạt động và mảnh vỡ. Vì Fragments nên là mô đun, bạn có thể định nghĩa một cuộc gọi lại trong các phương thức Fragment to call trong Activity.

+1

Cảm ơn rất nhiều, bây giờ tôi có ý tưởng gọi lại –

+0

Cảm ơn rất nhiều..Đây là một ví dụ rất đơn giản và đẹp mắt .... –

34

Trước tiên, bạn tạo giao diện, sau đó xác định một phương thức, phương thức này sẽ hoạt động như một cuộc gọi lại. Trong ví dụ này, chúng ta sẽ có hai lớp, một lớp classA và một ClassB

Interface:

public interface OnCustomEventListener{ 
    public void onEvent(); //method, which can have parameters 
} 

người nghe chính nó trong ClassB (chúng tôi chỉ đặt người nghe trong ClassB)

private OnCustomEventListener mListener; //listener field 

//setting the listener 
public void setCustomEventListener(OnCustomEventListener eventListener) { 
    this.mListener=eventListener; 
} 

trong lớpA, cách chúng tôi bắt đầu lắng nghe vì bất cứ điều gì classB phải thông báo

classB.setCustomEventListener(new OnCustomEventListener(){ 
    public void onEvent(){ 
     //do whatever you want to do when the event is performed. 
    } 
}); 

làm thế nào để chúng ta kích hoạt một sự kiện từ ClassB (ví dụ trên nút nhấn)

if(this.mListener!=null){ 
    this.mListener.onEvent(); 
} 

T.B. nghe tùy chỉnh của bạn có thể có nhiều thông số như bạn muốn

Source

6

Callback có thể rất hữu ích trong Java.

Sử dụng gọi lại, bạn có thể thông báo cho Lớp khác về hành động không đồng bộ đã hoàn thành với thành công hoặc lỗi.

2

Nó đã được thảo luận trước here.

Trong lập trình máy tính, gọi lại là một đoạn mã thực thi được chuyển thành đối số cho mã khác, dự kiến ​​sẽ gọi lại (thực thi) đối số vào một thời điểm thuận tiện. Lệnh gọi có thể ngay lập tức như trong một cuộc gọi lại đồng bộ hoặc nó có thể xảy ra vào lúc sau, như trong một cuộc gọi lại không đồng bộ.

1

Tôi đang sử dụng trong trường hợp sau: Trong giao diện người dùng, tôi có một hành động từ nút, ví dụ: người dùng muốn tải xuống tệp 500mb. Cảm ơn tôi sẽ khởi tạo công cụ nền (lớp AsyncTask) và truyền tham số cho anh ta. Trên giao diện người dùng, tôi sẽ hiển thị hộp thoại tiến trình chặn và tắt người dùng để thực hiện bất kỳ nhấp chuột nào khác. Câu hỏi đặt ra là: khi nào cần xóa chặn khỏi giao diện người dùng? câu trả lời là: khi động cơ kết thúc với thành công hay thất bại, và điều đó có thể với callbacks hoặc thông báo.

Sự khác biệt giữa thông báo và gọi lại là một câu hỏi khác, nhưng 1: 1 nhanh hơn gọi lại.

2

CallBack Interface được sử dụng cho thông tin Fragment đến Fragment giao tiếp trong Android.

Tham khảo here để bạn hiểu.

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