본문 바로가기
안드로이드 자바

[JAVA][Android] 죽지않는 서비스(Immortal Service)

by teamnova 2021. 10. 31.

출처 : https://forest71.tistory.com/185

 

Android 의 서비스는 총 세종류가 있다.

1. 포그라운드

2. 백그라운드

3. 바인드

이 셋중 죽지 않는 서비스는 포그라운드를 사용하면된다.

 

하지만, 아래와 같이 Notification 알림창이 지속적으로 보여지고있다.

[죽지 않는 서비스를 백그라운드 서비스로 할 수 없는이유]

백그라운드 서비스는 시스템이 리소스가 부족한 경우 os에서 임의로 중단이 가능하다.

 

이 문제를 제대로된 대안책은 아니지만 출처 링크는 나름의 대안책을 내서 해당 글을 이야기해보려한다.

 

요소들은 이렇게 있다.

- AlarmRecever(BroadcastReceiver)

- MainActivity(Activity)

- RealService(Service)

- RebootReceiver(BroadcastReceiver)

- RestartService(Service)

전체적인 흐름

1. 휴대폰 켜짐

 boot_completed(BroadcastReceiver)휴대폰이 켜졌는지를 확인

 

2. 버전 확인

SDK_INT >= Oreo 이라면 startForegroundService 를 통해 RestartService 실행

SDK_INT < Oreo 라면 startService 를 통해 RealService 실행

 

(startForegroundService 로 RestartService 가 실행되었을경우 해당 서비스가 startService를 통해 RealService 실행)

 

3. RealService 가 돌아가는중에 리소스 부족으로 종료되었을 경우

AlarmRecever(BroadcastReceiver) 를 통해서 RealSerivce 가 죽었을때 Alarm 으로 다시 버전확인 하는부분으로돌아가 RealService 실행해준다.

 

[단점]

ForegroundSerivce의 Notification이 지속적으로 표출되어있지는 않지만 RealService가 죽었을경우 다시 켜주는 과정에서 다시 깜빡거리게 된다.

 

아래의 스틱코드 링크의 포스트를 즐겨 찾기를 하게 될경우

https://stickode.com/detail.html?no=2554

 

intellj 나 vscode 같은 에디터에 스틱코드 플러그인을 설치하고 로그인 했을경우 간단한 명령어로 코드가 붙여넣기가 가능하다.

 

https://stickode.com/mainlogin.html

스틱코드를 통해 여러가지 예제를 다운받지 않고 바로 적용해보거나 자신이 자주쓰는 코드들을 올려서 

 

위와 같이 메소드를 쳐서 빠르게 적용이 가능하니 많이 이용하면 작업의 생산이 올라갈 것입니다.

 

감사합니다