제 질문에 관심가져 주셔서 감사합니다. 질문들어갑니다.
private LayoutInflater mInflater;
@Override
public Object getSystemService(String name) {
if (LAYOUT_INFLATER_SERVICE.equals(name)) {
if (mInflater == null) {
mInflater = LayoutInflater.from(getBaseContext()).cloneInContext(this);
}
return mInflater;
}
return getBaseContext().getSystemService(name);
}
안드로이드 에서 empty프로젝트로 프로젝트를 생성하면 보이는 것이 setContentView(@Layout int ResId)입니다.
저는 메서드가 궁금하여 파보았습니다. 즉 상속관계를 생각하며 계보를 계속 따라갔습니다.
그런데 결국 여기코드에 보이는 ContextThemeWrapper클래스에 다다랐을 때 고민에 빠졌습니다.
mInflater전역변수는 색처리된 이 세군데가 전부입니다. 이 전역변수가 초기화되려면 cloneInContext() 밖에는 없습니다. 그런데
from(getBaseContext()).cloneInContext(this)
이것을 하면 자기의 부모클래스의 context에 붙어있는 layoutInflater를 복사하여 자기의context를 붙여줍니다.
그런데 이상한건 자기의 context는 결국 부모의 context와 동일한것 아닌가요? 그렇다면 이건
결국 같은데 떼었다 붙였다를 한것과 다를것이 없지 않습니까?
그래서 궁금해서 더 찾아보려고 하니까 cloneInContext(Context newContext)는 추상메서드였습니다.그래서
구현클래스를 찾으려고 했지만 알길이 없습니다. 알고계신분이 있으시면 알려주시면 감사하겠습니다.
그리고 앱이 실행된 후에 LayoutInflater 인스턴스가 생겨나는 최초부분이 어디인지도 알고 싶습니다.
읽어주셔서 감사합니다.