Aosp instantiate, onFirstRef

Galmaegi
2 min readJul 29, 2020

--

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()가 호출된다고 생각하면 된다.

https://cs.android.com/android/platform/superproject/+/master:system/core/libutils/include/utils/StrongPointer.h;l=202;bpv=1;bpt=1

--

--

Galmaegi
Galmaegi

Written by Galmaegi

0 Followers

Android developer

No responses yet