티스토리 뷰
Context 파해치기
안드로이드의 4가지 구성요소 때문에 main()없이 자바코드 실행이 가능하다.
반면에, 4가지 구성요소는 간단하게 new를 통해 생성이 불가하다.
왜냐하면 context를 상속받기 때문이다.
- context는 무엇일까? 안드로이드 시스템에 있는 클래스와 자원들을 앱의 레벨까지 올려다 주는 것이다.
예를 들면, 액티비티를 시작시킨다든지, 브로드캐스팅 기능, 인텐트를 주고 받는 기능 등 말이다.
요렇게 구성되는데, 하나씩 보면,
CotextImpl은 Context가 추상화한 function들을 실제로 구현한다.
ContextWrapper는 모든 context의 function들을 감싸고 있으며, CotextImpl을 클래스를 사용해서 실행시킨다.
attachBaseContext function의 역할은 ContextWrapper가 context를 오직 한번만 적용되도록 한다.
ContextThemeWrapper 요놈은 이름처럼, 앱으로부터 Theme (주제)을 가져오거나 Manifest.xml에 정의된 ‘android:theme’을 액티비티에 적용시키는 역할을 해준다.
Application과 Service는 Theme이 없음.
빨간색 세 명이 초기화 될 때, ContextImpl이 생성되서 Context안의 function을 수행시킨단다.
- 자 그러면 우리는 Context가 몇갠지 계산가능
Number(Context) = Activity + Service + 1 (Application)
- Context가 무엇을 할 수 있을까?
이렇단다.
- Context를 얻는 방법.
View.getContext() 하면 view가 주체가 된 context다 (activity로 부터 나온 context 겠지)
Activity.getApplicationContext() 하면 Application 전체의 context다.
ContextWrapper.getBaseContext() 하면 내가 가진 Context가 아닌 다른 Context를 가져오려고 할 때 사용한단다.
ContextWrapper를 경유해서 사용한단다.
getBaseContext() = this = getContext() 다 똑같음.
- getApplication()과 getApplicationContext()의 차이.
둘 다 똑같이 context인데, getApplication()은 Activity와 Service에서만 사용이 가능하다.
잘쓰자. 잘못 사용하면 memory leak이 발생한단다.
http://ericyang505.github.io/android/Context.html 요거 번역 와 이제 번역까지 한다 ㅋㅋㅋㅋㅋ
http://blog.naver.com/cestlavie_01/40191899118 요거 살짝 참고.
'개발 > 안드로이드' 카테고리의 다른 글
Android Dagger2 ContributesAndroidInjector (2) | 2017.11.29 |
---|---|
Android Different Languages 적용기 (1) | 2017.11.15 |
Android Custom Content Provider (0) | 2017.11.01 |
Android SQLite Database (3) | 2017.10.27 |
Android Content Provider (0) | 2017.10.26 |