소개 : : 나는 3 개의 활동, DashBoard
, Feed
및 Events
을 보유하고 있습니다. DashBoard는 응용 프로그램이 시작될 때 시작됩니다. 거기에서 사용자는 피드 또는 이벤트로 이동할 수 있습니다.다른 활동에 의해 액세스되는 별도의 다운로더 클래스 (별도 스레드)
문제 : DashBoard
이 시작될 때 다운로드를 시작하고 싶습니다. (물론 별도의 스레드로). 거기에서 사용자는 Feed
또는 Events
을 입력 할 수 있으며 다운로드가 진행 중이거나 이미 완료되었습니다. 활동이 Feed
또는 Event
(인스턴스에서 적절한 경우)에는 다운로드가 완료되고 데이터가 사용 가능하다는 알림을 받아야합니다. 가장 좋은 방법은 무엇입니까?
내 현재 코드 : 나는 DashBoard
활동에 의해 시작됩니다 다운로더 클래스 DownloadHandler
있습니다. 이 클래스는 별도의 스레드에서 다운로드됩니다. 클래스는 completed
이라는 부울을 추적합니다. false
으로 인스턴스화되고 다운로드가 완료되면 true
으로 변경됩니다.
현재 내 수업 Feed
또는 Events
은 UI 스레드를 차단하지 않도록 별도의 스레드에서 변수 completed
을 100ms마다 폴링합니다. completed
변수가 true
이되면 해당 클래스의 함수를 호출 한 다음 DataHandler
클래스에 다운로드 한 데이터를 쿼리합니다.
이것은 작동하지만 내 논리가 약간 지저분하고 더 좋은 방법이 있어야한다고 생각합니다. 두 개의 개별 스레드를 사용하기 때문에 하나는 다운로드 용이고 하나는 완료된 변수를 폴링하는 스레드입니다. 이 작업을 수행하는 더 좋은 방법이 있습니까?
나는 AsyncTask
과 다른 콜백을 읽었지 만 문제는 특정 클래스에서 콜백을 지정할 수 없다는 것입니다. 다운로드가 완료되면 현재 활동은 DashBoard
, Events
또는 Feeds
일 수 있습니다. 다운로드가 끝나면 어떤 활동이 시작될지는 아무런 보장이 없습니다.
https://github.com/rajeshcp/Android-Download-Manager, 기본적으로 이것은 응용 프로그램 내부의 모든 http 호출을 처리 할 단일 톤 클래스 (DownloadManager)입니다. 이건 내 응용 프로그램 덕분에 많은 도움을 준 덕분이다. – Triode
다운로드 관리자 스크립트는 필자가 요구하는 것이 아니다. 이미 다운로드 관리자 클래스가 있습니다. 그저 어떤 액티비티가 열려 있느냐에 따라 함수를 마무리 할 때 다시 호출 할 수 있어야합니다. –