2011-07-26 4 views
2

나는 다양한 서비스에 대해 http 요청을하는 Android 라이브러리를 작성 중입니다. 현재 AsyncTask에서 http 요청이 발생했으며 onPostExecute 메서드로 결과를 제공하는 응용 프로그램 대리자를 다시 호출합니다. 따라서 기본적으로 개발자는 AsyncTask를 만들지 않고 원하는 메서드를 호출합니다.Android 라이브러리 : 내부적으로 비동기 http 요청을 처리 하시겠습니까?

그러나 이러한 호출을 비동기식으로 수행해야하는지 또는 라이브러리를 완전히 동기식으로두고 개발자가 응용 프로그램의 AsyncTasks에 메소드 호출을 넣어야하는지 궁금해하기 시작합니다. 이런 일에 최선의 방법이 있습니까?

답변

-1

라이브러리에서 비동기 적으로 호출하는 것이 좋습니다. 데이터가 수신 될 때 Activity 호출에 알리려면 요청 및 처리가 완료된 후 클래스 내부에서 호출하는 추상 메소드를 Class에 정의해야합니다. 그리고 Class을 사용하는 사용자는 해당 메서드를 구현해야하며 처리가 완료되면 해당 메서드가 호출됩니다. 다음

public class ProcessingClass{ 
     private void processData(){ 
      //Async processing 
      ..... 
      onProcessComplete(); 
     } 
     public abstract void onProcessComplete(){ 

     } 
    } 

그리고 이제이 같은 것을 할 수있는 활동 안에 가정 해 봅시다 : 예를 들어, 대부분의 경우, 다양한 API를 사용하여 여러 프로젝트의 일부가되는 내 경험에서

private class MyProcessingClass extends ProcessingClass{ 
     @Override 
     public void onProcessComplete(){ 
      //The task is complete... 
      //Update UI or something like this... 
     } 
    } 
2

을 우리가 어디 비동기 API를 제공하기로 결정한 후에 결국 추가 동기 API를 제공하거나 이전 비동기 API를 새로운 동기 API로 폐기해야했습니다.

API를 작성할 때 최종 사용자에 대한 가정을 피하려고합니다. 나는 다음과 같은 흥미를 찾을 수 있습니다 생각 (또는 그래서 나는 희망) : 당신이 엄격 할 경우, 개발자는 비동기 요청을하는 것보다 다른 선택의 여지가 있도록 How to Write Good API

1

, 당신의 라이브러리에 비동기 작업을 넣어 (귀하의 도서관에서 이미 완료되었습니다).

그러나 유연성을 높이려면 개발자에게 비동기식으로할지 여부를 결정해야합니다.

내가 당신이라면 도서관의 목적은 요청을하는 것이고 요청을하는 방법이 아니라 결과를 얻는 것입니다. 이렇게하면 라이브러리는 개발자의 욕구에 부합하고 다른 방법으로는 적합하지 않습니다.

관련 문제