2012-03-26 8 views
0

소개 : : 나는 3 개의 활동, DashBoard, FeedEvents을 보유하고 있습니다. DashBoard는 응용 프로그램이 시작될 때 시작됩니다. 거기에서 사용자는 피드 또는 이벤트로 이동할 수 있습니다.다른 활동에 의해 액세스되는 별도의 다운로더 클래스 (별도 스레드)

문제 : DashBoard이 시작될 때 다운로드를 시작하고 싶습니다. (물론 별도의 스레드로). 거기에서 사용자는 Feed 또는 Events을 입력 할 수 있으며 다운로드가 진행 중이거나 이미 완료되었습니다. 활동이 Feed 또는 Event (인스턴스에서 적절한 경우)에는 다운로드가 완료되고 데이터가 사용 가능하다는 알림을 받아야합니다. 가장 좋은 방법은 무엇입니까?

내 현재 코드 : 나는 DashBoard 활동에 의해 시작됩니다 다운로더 클래스 DownloadHandler 있습니다. 이 클래스는 별도의 스레드에서 다운로드됩니다. 클래스는 completed이라는 부울을 추적합니다. false으로 인스턴스화되고 다운로드가 완료되면 true으로 변경됩니다.

현재 내 수업 Feed 또는 Events은 UI 스레드를 차단하지 않도록 별도의 스레드에서 변수 completed을 100ms마다 폴링합니다. completed 변수가 true이되면 해당 클래스의 함수를 호출 한 다음 DataHandler 클래스에 다운로드 한 데이터를 쿼리합니다.


이것은 작동하지만 내 논리가 약간 지저분하고 더 좋은 방법이 있어야한다고 생각합니다. 두 개의 개별 스레드를 사용하기 때문에 하나는 다운로드 용이고 하나는 완료된 변수를 폴링하는 스레드입니다. 이 작업을 수행하는 더 좋은 방법이 있습니까?

나는 AsyncTask과 다른 콜백을 읽었지 만 문제는 특정 클래스에서 콜백을 지정할 수 없다는 것입니다. 다운로드가 완료되면 현재 활동은 DashBoard, Events 또는 Feeds 일 수 있습니다. 다운로드가 끝나면 어떤 활동이 시작될지는 아무런 보장이 없습니다.

+1

https://github.com/rajeshcp/Android-Download-Manager, 기본적으로 이것은 응용 프로그램 내부의 모든 http 호출을 처리 할 단일 톤 클래스 (DownloadManager)입니다. 이건 내 응용 프로그램 덕분에 많은 도움을 준 덕분이다. – Triode

+0

다운로드 관리자 스크립트는 필자가 요구하는 것이 아니다. 이미 다운로드 관리자 클래스가 있습니다. 그저 어떤 액티비티가 열려 있느냐에 따라 함수를 마무리 할 때 다시 호출 할 수 있어야합니다. –

답변

1

내 다운로드 스레드 (그 intentfilter 설정) 및 피드 및 이벤트 등록자 (등록자 등록을 잊지 말 것)에서 브로드 캐스트를 발생시킬 것이다. 나는이 목적을 위해이 솔루션을 자주 사용합니다. 쉽고 좋은 일을합니다.

BroadcastReceiver mBroadcastReceiver = new BroadcastReceiver() { 
     public void onReceive(Context context, Intent intent) { 
      // TODO Auto-generated method stub 
     } 
}; 

당신은 자신의 나머지 부분을 해결해야합니다 : 어렵지 않습니다. 거기에는 많은 헛소리가 있거나 안드로이드에 들어갈 표준 책을 사야합니다.

+0

은 좋은 생각처럼 들립니다. 몇 가지 코드 예제를 제공해 주시겠습니까? 단지 개요. 이벤트 및 피드에 방송 수신자를 등록하는 방법. 인터넷에서 볼 수있는 모든 예제가 별도의 BroadcastReciever 클래스를 사용하기 때문에 ... 어제 답변으로 인정 된대로 –

+0

...더 똑똑한 해결책은 추상적 인 클래스 확장 액티비티와 피드 및 이벤트가이 추상 클래스를 확장하는 것입니다. 다운로드 스레드에서 리스너를 설정하고 추상 액티비티 (onPause에서 등록 취소하지 않음)를 onStart에 등록하면 스마트 작업이 수행됩니다. 그러나 브로드 캐스트 접근법 또한 좋은 작업을 수행하며 다운로드 스레드의 수명주기에 대해 알 필요가 없다는 장점이 있습니다. –

+0

예. 실제로 활동과 싱글 톤 다운로더 클래스가있는 서브 펍 패턴으로갔습니다. 당신이 말한 것과 같은 전반적인 것입니다. –

관련 문제