Aosp소스를 분석하다보면 instantaiate()함수와 onFirstRef ()함수를 사용하는 용례를 찾아볼 수 있다.
instantaiate
ex) frameworks/av/media/audioserver/main_audioserver.cpp
...
ALOGI("ServiceManager: %p", sm.get());
AudioFlinger::instantiate();
AudioPolicyService::instantiate();
...
이 함수는 BindService를 재정의한 클래스들만 사용할 수 있는 함수로써
frameworks/native/libs/binder/include/binder/BinderService.h
에 정의되어 있다.
static void instantiate() { publish(); }
내부적으로 publish()를 호출하고 있는데, 이는 ServiceManager에 해당 서비스를 자동으로 add해주는 함수이다.
onFirstRef
StrongPointer.h에 정의되어있는 sp클래스의 생성자가 불리면 incStrong이 호출되게 되고, incStrong는 내부적으로 onFirstRef()를 호출하게 된다.
즉 sp클래스를 사용하여 변수 관리하는 경우 최초 초기화시점에 onFirstRef()가 호출된다고 생각하면 된다.