2010-04-02 4 views
14

android 응용 프로그램 개발에서 자주 단어 CallBack을 여러 곳에서 읽습니다. 기술적으로 우리에게 말해주는 것이 무엇을 의미하는지, 그리고 응용 프로그램에서 callback을 어떻게 사용할 수 있는지 알고 싶습니다. 그것을 이해하고 사용하기위한 안내서가 필요합니다.android의 콜백?

답변

13

은 내가 [콜백] 할 수있는, 우리에게 자바와 같은 기능 값 인수없이 객체 지향 프로그래밍 언어에서 기술적으로

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

을 " 을, 그것이 무슨 뜻인지 말하고 싶어 호출 측이 구체적인 구현을 제공하는 동안 수신자가 하나 이상의 메소드를 호출하는 추상 클래스 나 인터페이스를 전달하여 시뮬레이션 할 수 있습니다. 이러한 객체는 사실상 콜백 번들과 조작해야하는 데이터입니다. 다양한 디자인 구현에 옵저버 (Observer), 전략 (Strategy) "과 같은 패턴을 포함한다. 내가 응용 프로그램의 콜백을 관리 할 수있는 방법

나는 이것이 무엇을 의미하는지 모른다.

+0

죄송합니다. 다시 한번 최악의 영어 마크입니다. 어쨌든 옳은 것을 한 것입니다. – Praveen

+0

명확한 설명 –

5

흠. 어때? C에서 퀵 소트 알고리즘을 작성합니다. 알고리즘을 사용하려는 사용자는 사용자가 알고리즘으로 정렬하는 것에 적합한 비교 메소드를 제공해야합니다. 사용자는 quicksort 코드에 대한 사용자의 비교 메서드에 대한 함수 포인터를 전달해야합니다. quicksort 코드는이 주소 인 함수 포인터를 사용하여 사용자의 비교 함수를 호출합니다. 정렬되는 항목의 순서를 결정하는 방법을 알 수 없기 때문에 함수 원형, 구현이 제공되지 않습니다. 사용자는 사용자가 정렬중인 내용에 맞는 compare 구현을 제공합니다. 이 구현은 함수 프로토 타입과 일치해야합니다. 함수 포인터는 quicksort 알고리즘에 의해 사용되어 사용자의 코드에 다시 접근합니다.

이것은 실제로 다형성에 관한 것입니다.

자바에서는 인터페이스를 사용하여이를 수행 할 수 있습니다. 따라서 정렬을 위해 IComparer 및 IComparable 인터페이스를 참조하십시오.

5

호출 가능 인터페이스를 사용하여 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(); 

    } 

}