1. 간략 설명

포그라운드 서비스

- 절대 종료되지 않는다

- 상단에 알림을 함께 제공해야합니다 (노티), (반드시 노티 필요함)

 

 

 

2. 설명

"포그라운드 서비스"는 항상 서비스가 전면에 올라와 있는 겁니다.

 

서비스가 백그라운드에서 계속 도는데, 

이것이, 안드로이드 시스템에 의해서,  kill을 당할 수가 있습니다.

강제로 종료가 될 수가 있습니다.

왜냐하면 다른 앱에서 메모리를 더 필요로 한다면, 그래서 오래 도는 서비스는 

안전하지가 않습니다. 

 

그래서 계속 강제 종료되지 않는 서비스를 실행을 해야 한다고 한다면,

"포그라운드 서비스"를 알고 있어야 합니다.

 

"포그라운드 서비스"는 절대 절대 절대 절대 절대 절대 절대 절대 절대 절대

절대 절대 절대 절대 절대 절대

절대 절대 

종료가 되지 않습니다!

 

 

하지만,

"포그라운드 서비스"를 막 남용(쓰게)하게 되면,

안되기 때문에, 몇 가지 제약이 있습니다.

 

일딴,

상단에 알림을 함께 제공 해야 합니다. =  notification(알림)함께 제공을 해야 합니다.

 

그럼, 사용자가 "이것은 지금 "포그라운드 서비스"로 동작을 하고 있구나"라고 인지할 수 있게 해야 합니다.

 

 

 


(보기전에)

startForegroundService() 가 안드로이드에서 이미 메소드가 정의 되어 있었음,,,

근데 내가 startForegroundService() 메소드를 그냥 만듬.

 

 

 

 

 

서비스코드 - 1차 코드

 

startForeground메소드를 서비스내부에서 별도로  실행을 해가지고, 포그라운드로 승격을 시켜줘야합니다.

 

 

 

 

 

 

서비스 코드 - 2차 코드 (설명만 추가, 코드 동일)

 

이렇게 하면 일반적으로 실행이 되는데,

근데, "오래오"에서부터는 이 코드가 동작을 하지 않기 때문에,

 

 

 

 

 

 

서비스 코드 - 3차 코드 (설명만 추가, 코드 동일)

"오래오"에서부터는 

알림채널을 등록해야 합니다.

위에 코드보면 channelId가 "default" 잖아요. "default"는 현재 채널이 없다는 겁니다. 그걸 바꿔줘야해요. (채널을 등록해 줄꺼임)

 

 

 

 

서비스 코드 - 4차 코드 (코드 추가)

이젠 startForegroundService()메소드(내가 만든거)를 어디 위치에서 실행을 할 것이냐?

 

onStartCommand()에서 해야한다!!

 

외부에서 onStartCommand()쪽으로 
intent를 던져서(intent에다가 액션을 던져서)
액션을 분기를 탈 수가 있습니다.

 

 

 

 

 

 

XML 레이아웃

 

 

 

 

 

 

메인 JAVA 코드

 

 

 

 

 

결과

 

 

 

 

 

 

 

 

 

 

 

 

 

포그라운드 서비스 코드치면 주의 해야 했던거

1. startForegroundService() 로만 실행을 해야한다는 거

 

2. 알림채널이 필요하다라는 거

 

3.(알고 있으면 좋은거)

 

-MainActivity.java-

startForegroundService()가 실행을 하면

5초 안에

(밑에 있는) startForeground() 하지 않으면 ANR이 발생합니다

 

-Service.java(서비스코드)-