Android API 18에서 startForeground()

Android API 17까지는 서비스가 시스템에 의해 강제종료 되는 것을 막기 위해서 서비스 시작 부분에 startForeground()를 호출했다. 이번 Android API 18에서도 여전히 사용할 수 있지만 notification bar에 안내가 강제로 뜬다.

시스템 앱(/system/app, /system/framework, /vender 폴더에 있는 앱)의 경우에는 기존과 같이 notification bar에 안내가 뜨지 않고 죽지않는 서비스를 만드는 방법이 있다. Androidmanifest.xml 파일의 <Application 선언 부분에 android:persistent=”true” 를 선언하는 것이다. 시스템 앱의 경우, 저 파라미터를 넣어주면 시스템에 의해 강제 종료 되지 않는다.

하지만, 다운로드 받은 앱은 조용히 안죽는 서비스를 만드는 방법이 없다. 원래 startForeground()함수를 이용하면 notification bar에 안내가 되어야 하는데 이전까지는 버그(추측이지만)로 인해 뜨지 않는 것이었고, 18부터는 title과 content를 넣지 않으면 기본 정보를 이용해서라도 notification bar에 현재 포그라운드로 실행되고 있는 서비스 정보가 노출되도록 수정되었다.