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

죽지않는 서비스 만들기.

0 추천

서비스를 하나 만들었습니다.

알람매니저를 통하여 서비스가 onDestroy()를 탈때, 알람을 등록하여 3초후 다시 재시작하게 하였습니다.

일반적으로는 서비스가 죽어도 다시 onDestroy()를 타면서 다시 실행이 되는데요,

 

여기서 문제가 있는데, 

환경설정-->앱-->다운로드 에서 제 앱을 완전히 강제종료(시스템 단에서 죽이는 거겠지요?)

하였을때는 onDestroy() 를 타지 않ㄴ습니다.

 

이렇게 앱을 죽일경우 GCM 푸쉬서비스도 받지 못하는것을 확인하였습니다.(맞나요?)

 

하지만 카카오톡 같은 경우를 테스트해보았을때, 강제종료 자체가 되지 않았습니다.

(강제종료가 되지 않는건지, 죽인즉시 살아나는 건지요?

어쨋든 이건 중요하지 않고..죽지 않는다는것이 중요하네요..)

어떻게 앱이 OS단에서 종료 명령을 내렸을때 살아있을수가 있을까요?

앱단에서 보면 이것은 비정상 종료로 구분되어, 개발자가 소스로 컨트롤 할 수 있는 부분도 아니지 않나요?

 

그래서 생각해낸 방법이 :remote로 또다른 서비스를 앱내에 구현하여, 지속적으로 저의 Background 서비스가 살아있는지를 관찰 한 후, 

죽었다면 다시 살리는 방법을 생각해보았는데요,

혹시 이렇게 시도해 보신 안펍선배님들 계신가요?

 

조언 부탁드립니다...

안드로이드로우 (15,740 포인트) 님이 2015년 1월 12일 질문

2개의 답변

+1 추천
 
채택된 답변
약 1년 전에 비슷한 문제로 고민하고 이것저것 시도해 보았습니다.

일단 카카오톡 같은 경우 SKT 단말에서는 서비스 종료해도 살아나지만

KT 폰에 설치된 카카오톡은 다시 살아나지 않았었습니다.

관련하여 SKT 폰에는 카톡을 살려주는 서비스(?) 같은 게 있다는 글을 어디선가 본 기억이 있는데 이건 확실하진 않습니다.

말씀하신 방법도 서비스를 살리는 서비스를 강제종료하면 결국 같은 결과가 아닌가 싶습니다.

환경설저에서 강제종료 하는 경우에 서비스를 되살리는 건 결국 포기 했었고

일반 적인 경우는 onStartCommand 에서 return Service.START_STICKY; 하거나

AlarmService 를 이용하여 다시 서비스를 실행시키는 방법을 사용했습니다.

부가적으로 USB 케이블 연결 시 이벤트를 받아서 서비스를 재실행 시키는 로직도 추가했네요.

하루 한 번 정도는 충전 때문에 케이블을 연결할 테니까요.ㅎㅎ
가랑비 (10,530 포인트) 님이 2015년 1월 12일 답변
안드로이드로우님이 2015년 1월 21일 채택됨
답변감사합니다. ㅎㅎ

USB 케이블을 연결할때 할 수도 있군요!
생각해보니 그러네요.
우선 Start_sticky는 환경설정->강제종료에 다시 살아나지 않구요ㅠㅠ
(테스트폰 갤럭시S4 공기계)

찾아보니 Application class를 활용하는 방법도 있다고 하던데
혹시 이 방법에 대하여 알고계신가요..?
답변이 늦었습니다;;
말씀하신 Application 클래스를 사용하는 방법은 잘 모르겠습니다.
그럼 수고하세요!
+1 추천
Service 라고 하셨는데요...

onStartCommand() 에서 서비스 동작타입에 대한 리턴을 하도록 하고 있습니다.

onStartCommand() Service.START_STICKY 와 같은 키워드로 검색을해보시면 어떨지요?
비애천사 (12,080 포인트) 님이 2015년 1월 12일 답변
StartCommand 내에
return type으로 SRART_STICKY 를 해보았습니다만..
시스템에서 강제종료 시킬시엔 이것도 동작하지 않네요ㅠㅠ
...