안드로이드 개발 질문/답변
(글 수 45,052)
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
//Setting Notificaion Code
telMgr = (TelephonyManager)getSystemService(Context.TELEPHONY_SERVICE);
telMgr.listen(new PSL(), PhoneStateListener.LISTEN_CALL_STATE);
return super.onStartCommand(intent, flags, startId);
}Service 내에 이런 코드가 있습니다.
전화가 올 때 마다 클래스 PSL(PhoneStateListener를 extend하는 클래스)의 동작을 수행합니다.
물론 PhoneStateListener이므로 전화가 올때 뭐 한다 이런 식입니다.
최초 실행 및 동작에는 아무런 문제가 없습니다.
하지만
Task Manager/Killer로 종료되거나 메모리가 부족하여 자연스럽게 종료되어 다시 실행되는 경우
서비스가 정상적으로 수행되지 않습니다.
Notification을 이용하여 startForeground()도 시도해보았으나 아예 작동을 하지 않고
onStartCommand()의 return값을 START_STICKY, START_REDELIVER_INTENT 등으로도 바꾸어보았으나 소용 없었습니다.
대신 설정 - 어플리케이션의 실행 중 어플리케이션 리스트에는
어플 재시작 전과 후 모두 프로세스 1개 및 서비스 1개가 찍혀있는데
조금 특이한 사항이, 강제 종료를 하게되면 이전과 비교하여 메모리 점유율이 1/10으로 떨어지고 그 때부터 동작을 하지 않습니다.
조언 부탁드립니다.




해결했습니다. startForeground()를 사용했습니다. notification에 Notification.FLAG_FOREGROUND_SERVICE 를 안넣었더군요