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

서비스 안에서 스레드 질문입니다

0 추천
안녕하세요? 초보 개발자입니다.

아무리해도 해결이 잘 되지 않아, 질문 게시판을 찾게되었습니다.

질문은...

    startService 로 서비스를 실행 후, Thraed로 100 밀리세컨드마다 특정 명령어를 실행하도록 구성되었습니다.

    그런데, 이게 반나절이상 혹은 하루가 지나면 스레드가 멈춰 있다가 다시 폰 화면을 켜면, 다시 살아나서 동작을 합니다.  어떨때는 반나절이상 혹은 하루가 지나면 스레드가 멈춰서 동작을 안하기도합니다.

 

추측이건데, 안드로이드 플랫폼이 스레드를 정리하는 과정이 있는지.. 조심스럽게 추측을 해보고만 있습니다.

스마트폰의 백그라운드에서 스레드가 중간에 죽거나, 멈춤 없이 계속 실행되게 하려면 어떻게 해야할까요?

 

조언 부탁드리겠습니다 ㅠㅠ
레디안 (560 포인트) 님이 2015년 11월 6일 질문
아래 두분의 답변이 정확해서 답변보다는 댓글로 남깁니다.

0.1초마다 확인하는 루틴은 일반적인 앱에서 사용하시면 악성앱이 됩니다.
다른 방식으로 처리가 가능한지 확인하셔서 방식을 바꾸시는게 좋을듯 합니다.
감사합니다^^
다른 방법을 이용해봐야겠네요 ㅎㅎㅎ

3개의 답변

+1 추천
 
채택된 답변
안드로이드 OS가 사용하지 않는 리소스를 정리한다는 것은 이미 알고 계실 것으로 생각합니다. 혹시 AlarmManager 사용을 고려해 보세요. ^^
mcsong (44,040 포인트) 님이 2015년 11월 6일 답변
레디안님이 2015년 11월 10일 채택됨
정말 감사합니다^^
정말 많은 도움이 되었습니다! AlarmManager 을 사용해 봐야겠네요ㅎㅎㅎ
+1 추천
무엇때문에 사용하시는지는 모르겠지만..

100ms면 1초에 10번 호출된다는건데... CPU리소스 + 배터리 잡아먹는 악성코드네요..

아무튼 답변을 드리면

안드로이드 VM의 경우 메모리 등의 리소스가 부족할 때 우선도가 낮은 프로그램을 종료 시켜 리소스를 확보하는데, 화면에 보이는 Activity에 비해, Service의 경우 우선도가 낮은 편이라. 장기간 돌리시면 종료 될 가능성이 높습니다.

서비스를 foreground로 설정하는 방식이나, 종료 시 다시 실행 시키는 로직을 넣는 것도 우회책이긴 하지만.. 가능하면 악성코드를 만드시지 마시고 다른 방식으로 체크하세요..
익명사용자 님이 2015년 11월 6일 답변
상세한 답변 정말 감사드립니다^^
악성코드가 되어 버리는 군요..ㅠㅠ, 그럴 의도는 아닌데, 그렇게 되어버리네요 ㅠㅠ
덕분에 한층 더 지식을 쌓고 갑니다 ^^

감사합니다 ㅎㅎ
0 추천
제 생각에는 마시멜로 패치 하시고 sdk 23 이상을 쓰신다면 폰이 오래꺼져있으면 Doze 모드로 바뀌게 됩니다.

doze모드에 대해서 구글링 해보시면 될거같습니다.
고수가되고싶어요 (720 포인트) 님이 2016년 7월 4일 답변
...