2011-02-05 3 views
4

나는 그 다음에 두 개의 startService를 호출 할 때 IntentService의 개인 데이터가 지워진다는 문제가있다. 나는 첫 번째 호출이 끝난 후 서비스가 중단되었다가 두 번째 호출을 처리 할 때 다시 생성된다고 가정한다. IntentService를 다시 만들지 않도록 강제하거나이 개인 데이터를 startService 루틴의 두 번 연속 호출에서 동일하게 저장하는 방법이 있습니까?강제로 IntentService를 다시 만들 수없는 방법이 있습니까?

답변

2

첫 번째 호출이 끝난 후에 서비스가 중지되었다고 가정하고 두 번째 호출을 처리 할 때 다시 작성한다고 가정합니다.

아니요. Intents이 (가) 모두 처리 된 경우에만 중지됩니다.

+1

첫 번째 인 텐트가 전송되었다고 가정하면 IntentService에서 처리되어 IntentService가 중지되었습니다. 얼마 후, 두 번째 의도가 전송되었습니다. IntentService의 컨텍스트를 이전 인 텐트를 처리하지 못하게하려면 어떻게해야합니까? – miqqo

+1

@miqqo : 그렇지 않습니다. 그것이 바로 요점입니다. 호출 사이에 'IntentService'가 RAM에 없습니다. 실제로 행운과 함께 전체 응용 프로그램은 RAM에 저장되지 않습니다. 다른 운영 체제의 다른 응용 프로그램처럼 이것을 처리해야합니다. 데이터베이스와 같은 영구 저장소에서 실행하는 동안 물건을 저장하십시오. – CommonsWare

3

을 사용하여 데이터를 인스턴스간에 유지하려는 경우 정적 변수에 넣을 수 있습니다. 일반적인 예 : 디스크를로드하는 상태가 있으므로 먼저 인스턴스화 할 때 데이터를로드하는 글로벌 싱글 톤을 만든 다음 데이터를 다시로드하지 않고 동일한 인스턴스를 사용하는 추가 요청을 수행합니다. onCreate()에서 서비스의 새 인스턴스가 싱글 톤을 검색 할 때 이전 서비스 인스턴스가 이미 요청한 경우 다시로드 할 필요가 없습니다.

이러한 디자인을 할 때 프로세스의 수명주기와 죽을 수있는 시점을 이해하는 것이 매우 중요합니다. 그렇지 않으면 정상 작동 중에 프로세스가 종료 될 때 무작위로 데이터가 손실 될 수 있습니다.

관련 문제