2011-11-02 3 views
1

ContentObserver (C)를 호스팅하는 서비스 (S)를 만들었습니다. C는 일부 데이터를 추적하고 데이터베이스 변경 사항을 기록합니다 (D).contentobserver의 서비스 잠시

S에는 Timed 간격으로 D의 내용을 파일에 덤프하는 타이머도 있습니다.

나는 내 서비스를 내 휴대폰에서 실행하고 있으며 모든 것이 잠시 (2 ~ 3 시간 정도) 잘 보입니다. 그런 다음 갑자기 데이터 변경 내용을 기록하지 않고 파일 덤프를 중단합니다. 나는 데이터를 변경하고 (C onChange on on on C), 장치를 깨우기 위해 전화를 걸어 보았지만 아무 일도 일어나지 않았다. service stil inactive. S가 계속 실행 중이고 노트북에 연결할 때 로그에 오류가 표시되지 않습니다.

내 생각 엔 서비스가 (CPU 슬라이스를 얻지는 않는다) 자고 있다는 것입니다. 나는 wakelock에 대해 조금 읽었지만 항상 전화가 깨어지기를 원하지 않습니다.(). 대안은 T 분마다 폴링 작업을 수행하는 반복 알람을 만드는 것입니다. 사용자가 ContentObservers와 함께 아이디어를 더 좋아하는 이유는 사용자가 업데이트간에 데이터를 변경 (특히 삭제) 할 수 있기 때문입니다. ContentObserver를 사용하면 일정한 간격으로 스냅 샷이 아닌 모든 변경 사항을 얻을 수 있습니다.

정기적 인 서비스에서 어떻게 깨울 수 있습니까?

안부 프레데릭

답변

0

당신은 설정된 간격으로 보류중인 의도를 방송하기 위해 알람 관리기를 사용할 수 있습니다. RTC_WAKEUP 유형을 사용하면 장치가 잠 들어있을 때도 전송됩니다.

Intent intent = new Intent("android.intent.action.DO_SOMETHING"); 
PendingIntent pendingIntent = PendingIntent.getBroadcast(this, 0, intent, 0); 

AlarmManager alarmManager = (AlarmManager) getSystemService(Service.ALARM_SERVICE); 
alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, System.currentTimeMillis(), 60*60*1000, pendingIntent); 

그런 다음 인 텐트의 브로드 캐스트 리시버를 등록하고 수행해야하는 작업을 수행하십시오. aprox 후 브로드 캐스트 리시버가 시간 초과됩니다. 10 초이므로 긴 작업이 있다면 서비스를 사용하십시오.

+0

안녕 Erik. 응용 프로그램은 이미 (내 질문에 명시된 바와 같이) 서비스입니다. 내 문제는이 서비스가 잠들고 데이터 모니터링을 중단한다는 것입니다. 해당 수신기에 경보를 등록하려고했습니다. 그런 다음 수신기는 의도와 함께 서비스를 호출합니다. 이것 주위에 다른 방법이 없을까요? – Frederik

+0

@Frederik Di 당신은 "내 문제는이 서비스가 잠들고 데이터 모니터링을 중단한다는 것입니다. 해당 수신기에 경보를 등록하려고 시도했습니다. 수신기가 의도 한대로 서비스를 호출합니다. 다른 방법이 없는가? 이 주변? " – dira

+0

@ computputer06 아니요. 답변을 얻지 못했습니다. 내 해결 방법은 경보를 만드는 것입니다. 이 질문을 한 지 오래되었으므로 새로운 API가 이러한 필요를 충족시키기를 바랍니다. – Frederik