2012-03-31 2 views
0

내 프로그램에 인 텐트 서비스를 사용하고 있습니다. Intent Service에는 매 15 분마다 실행되는 타이머 작업 스레드가 있습니다. 그것은 새로운 스레드에서 실행되기 때문에, 스레드 자체 내에서 이외의 다른 방법을 멈출 방법이 없습니다. 그것은 제 상황에서는 불가능합니다. 그래서, 초기 액티비티에서 인 텐트 서비스로 타이머 객체의 레퍼런스를 전달할 수 있기를 원합니다. 그 참조를 사용하여 timertask를 시작하거나 중지 할 수 있습니까?
어떻게 수행하나요?안드로이드에서 하나의 활동에서 다른 활동으로 객체 참조를 전달할 수 있습니까?

답변

2

의도 서비스에는 15 분마다 실행되는 타이머 작업 스레드가 있습니다.

아주 나쁜 생각입니다.

먼저 작동하지 않습니다. IntentServiceonHandleIntent()이 반환되는 즉시 종료됩니다. 당신이 정말로하고있는 것은 가 누출입니다.

둘째로, Service은 항상 안드로이드의 안티 패턴 인 메모리에 머물러 있어야합니다.

AlarmManager을 사용하여 15 분마다 IntentService에 명령을 보내고 타이머 작업을 제거하십시오.

그리고 이렇게하면 더 이상이 종류의 객체를 액티비티와 서비스 사이에 전달하는 것에 대해 걱정할 필요가 없습니다.

+0

응용 프로그램 자체가 닫힌 경우에도 AlarmManager가 작동합니다. 응용 프로그램 자체가 닫히면 알람 관리자는 15 분마다 백그라운드 서비스를 호출 할 수 있습니다. – Ashwin

+0

@Ashwin : "응용 프로그램 자체가 닫힌 경우에도 AlarmManager가 작동합니까?" - "닫힌"의 가장 일반적인 정의는 그렇다. "응용 프로그램 자체가 닫히면 경보 관리자는 15 분마다 백그라운드 서비스를 호출 할 수 있습니다." - 같은 질문 인 것처럼 보일 것입니다. – CommonsWare

관련 문제