2014-06-10 3 views
0

오랜 시간 (오프라인) 작업을 수행하고 있습니다. 보내고 수신 (읽기)이 내 애플 리케이션에 SMS를 듣고있다 카운트 다운 타이머 클래스를 사용하고 있습니다 onTick()onFinish(). onTick() 청취자에서 새 메시지가 있는지 확인하고 예상 메시지의 새 메시지가 있으면 타이머를 중지하고 화면에 표시합니다. 모든 것이 괜찮은 것 같습니다. 문제는 내가 떠나서 앱을 다시 입력하거나 방향을 바꿀 때 발생합니다.오프라인 백그라운드 작업에 RoboSpice 지원 사용 {countdowntimer와 robospice 결합}

네트워크 통화로 작업하는 동안 robospice은 이러한 모든 활동 전환 문제를 처리합니다. 그래서 robospice을 사용하여 위의 문제를 해결하고 싶습니다. 나는 github에서 robospice 오프라인 예제를 보았습니다. 그러나 LoadDataFromNetwork()은 리스너를 처리하지 않습니다. 그것은 단지 장기간의 작업을 수행합니다.

난 그냥 내 onTick() 수신기 내부의 spiceManager.execute() 메소드를 호출한다 무엇을해야 다음 내 문제 오프라인 예 상관했다면

원하는 어떤 메시지가있는 경우 loadDataFromNetwork() 그냥 내받은 편지함에서 메시지를 읽고 확인합니다 친절 하 고 requestListeners에 반환합니다. 그러나 그것은 내가 원하는 것이 아닙니다. 나는 Robospice가 완전한 타이머 클래스를 조절하기를 원합니다.

읽기 활동이 타이머 ontick() 수신기에서 수행 될 때 특정 필수 메시지를 읽을 때만 robospicerequestlisteners을 발사하는 방법을 얻을 수 없습니다.

실제로 robospice에서 이렇게 할 수 있습니까 ?? 그렇지 않다면 첫 번째 단락에서 언급 한 실제 문제를 해결할 해결책을 제시하십시오.

답변

0

RoboSpice를 사용하여 전환 한 다음 CountDownTimer이 필요하지 않은 경우 loadDataFromNetwork에 자신의 폴링을 구현할 수 있습니다. 이것은 Service의 작업자 스레드에서 실행되므로이 ​​스레드를 차단해도 UI에는 영향을 미치지 않습니다.

그래서 sleep 용 루프는 단순한 결과를 얻을 수 있습니다.

주의해야 할 사항은 SpiceService이 작동하도록 구성된 스레드 수입니다. 이 작업이 매우 오래 실행되고 기본 단일 작업자 스레드를 사용하는 경우 다음 번에 차단할 것이라고 믿습니다. SpiceRequests. SpiceService 클래스를 아직 서브 클래스 화하지 않은 경우 getThreadCount 메서드를 재정 의하여 1보다 큰 int를 반환 할 수 있습니다.