마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

서비스에서 스레드 유지 질문입니다.

0 추천
현재 서비스에서 노티피케이션으로 돌아가는 다운로드 모듈을 사용하고 있는데요.

서비스에서 싱글턴으로 생성한 클래스에서 다운로드 스택을 관리하여

스레드를 돌리고 서비스로 콜백이 오면 노티피케이션의 progress를 갱신하고 있습니다.

그런데 이게 그냥 가만히 놔두면 문제가 없는데

화면이 꺼진 상태에서 오랜 시간이 지나거나 하면 서비스와 싱글턴 클래스의 연결이 끊어져 버리는것 같습니다.

그래서 notification 클릭 이벤트도 안 먹히고, progress도 안 올라가는 상태가 되어 버립니다.

받던 파일이나 로그를 뒤져보니 아무래도 그 상태에서 아예 스레드가 interuppt 되어 버리고,

다운로드 스택을 관리하는 싱글턴 객체도 초기화 되어 버리는것 같습니다.

원래 화면 꺼지면 백그라운드에서는 스레드가 멈추는것 같지는 않은데,

서비스 생명주기에 따라서 관리를 해 줘야 하는 것인가요?
퐁풍 (8,740 포인트) 님이 2013년 3월 6일 질문
답변은 irc에서 해드림

1개의 답변

0 추천
 
채택된 답변
말씀하신 것으로 보면 프로세스가 중지된것으로 보이네요. 화면이 꺼진 상태라는 것과 서비스라는 것과 관련된것이니. 일단 프로세스의 우선 순위를 높이고 화면이 꺼져도 계속 동작될수 있게 코드를 만드는 것이 필요합니다.

1. Service의 startForeground로 Notification과 연동하여 우선 순위를 높일수 있구요.

2. 다운로드 받는 동안 PowerManager의 PARTIAL_WAKE_LOCK을 걸어놓고 끝나면 해재합니다.

위 두 작업을 통해서 다운로드가 화면이 꺼지거나 오래되더라도 프로세스가 중단되는 경우를 줄일수 있습니다. 하지만 여전히 프로세스가 중단될 가능성은 존재하므로, 말씀하신대로 서비스 라이프사이클 상에서 서비스가 중단되었다가 다시 시작하는 경우 다운로드를 재개할수 있는 코드를 넣어주시는것도 필요할거 같습니다.
회색 (21,340 포인트) 님이 2013년 3월 6일 답변
퐁풍님이 2013년 3월 7일 채택됨
답변 감사합니다 ^^ 좋은 하루 되세요
...