2012년 5월 19일
<서비스> bindService() flag??
BIND_AUTO_CREATE 플래그는
bindService() 호출에 의한 바인딩이 존재하는 동안
그것의 대상이 되는 Service를 자동으로 생성합니다.
이 플래그가 Service를 자동 생성하게끔은 하지만,
즉 Service의 onCreate() 콜백메쏘드가 호출되게끔 하지만,
Service의 onStartCommand() 콜백 메쏘드는
여전히 startService()를 통한 명시적 호출에 의해서만 호출됩니다.
그리고 이 플래그를 사용하지 않아도(즉 플래그를 0으로 설정해도)
일단 bindService()를 호출해 놓으면,
추후에 그것의 대상 Service가 생성될 때 bind 커넥션이 확립되고
Service 내에 구현되어 있는 Bind Object 내의 메쏘드들을 호출할 수 있습니다.
이 플래그를 지정하는 것은, 시스템에게 bindService()를 호출한 프로세스 만큼
중요하게, 그것의 대상이 되는 Service를 취급할 것을 지시하는 의미를 갖습니다.
즉, 메모리가 부족해서 메모리를 확보하기 위해 제거할 프로세스를 선택할 때,
그 Service에 바인드되어 있는 프로세스를 제거해야 하는 상황이 될 때에만
해당 서비스도 제거될 수 있도록 설정하는 의미를 갖습니다.
이것은 안드로이드의 LowMemoryKiller의 작동메커니즘과 관련되어 있습니다.
예를 들어, bindService()가 Foreground Activity에서 호출되었다고 가정할 때,
이 컴포넌트를 보유한 프로세스는 Foreground Activity를 보유하고 있기 때문에
가장 높은 중요도로 관리됩니다.
하지만 일반적으로 그것의 대상이 되는 Service를 보유한 프로세스의 중요도는
Foreground Activity를 보유한 프로세스 만큼 중요하게 관리되지 않습니다.
하지만 이 플래그를 사용하게 되면 Service를 보유한 프로세스 역시
bindService()를 호출한 프로세스와 동일한 중요도로 시스템에 의해 관리됩니다.
이것은 메모리가 부족한 상황에서 반복적으로 Service가 제거되었다가 다시 생성되는
상황을 방지하게 됩니다.
피드 구독하기:
댓글 (Atom)
댓글 없음:
댓글 쓰기