2014-10-18 2 views
0

IntentService를 사용하여 일부 처리를 수행 할 계획입니다. 서비스는 매니페스트에 등록 된 브로드 캐스트 리시버에서 시작됩니다. 이 서비스는 DB를 업데이트해야 동작이 길어질 수 있습니다 (심지어 분). CPU의 경우 wakelock을 사용할 수 있지만 OS는 무엇입니까?백그라운드 작업을위한 IntentService

  1. intentservice에서 startForeground를 호출 할 수 있습니까?
  2. 죽인 후에 intentservice가 다시 생성됩니까? 기본 동작은 무엇입니까? START_STICKY?
  3. 서비스는 동시 액세스를 피하기 위해 db lock (ReentrantReadWrite java lock)을 가져오고, 서비스가 종료되면 잠금이 해제됩니까? 그렇지 않다면 무엇을 할 수 있습니까? IntentSerivice으로

답변

1
  1. startForeground() 전화에서 당신을 중지 아무것도 Service 확장합니다. 실제로 알림을 표시해야합니다 (알림없이 전경 서비스를 사용할 수있는 해킹이 있었지만 운 좋게 4.3에서 수정되었습니다).

  2. IntentService의 기본 동작은 START_NOT_STICKY입니다. 생성자 또는 다른 곳에서 setIntentRedelivery(true)을 호출하여 변경할 수 있습니다.

  3. ReentrantReadWrite는 Java 레벨 잠금이며 파일/db/OS 레벨 잠금이 아닙니다. 즉, 프로세스가 종료되면 잠금이 해제됩니다. (당신은 'db lock'이라고 말했지만, 그것은 단지 부정확 한 표현이라고 가정합니다. DB를 어떻게 든 잠그지 않는 것입니까?).
+0

아니요, db lock은 db 클래스의 쓰기 잠금을 잡는 것입니다. :) – greywolf82

관련 문제