티스토리 뷰

Context 파해치기


안드로이드의 4가지 구성요소 때문에 main()없이 자바코드 실행이 가능하다.


반면에, 4가지 구성요소는 간단하게 new 통해 생성이 불가하다.


왜냐하면 context 상속받기 때문이다.


  1. context 무엇일까? 안드로이드 시스템에 있는 클래스와 자원들을 앱의 레벨까지 올려다 주는 것이다.

예를 들면, 액티비티를 시작시킨다든지, 브로드캐스팅 기능, 인텐트를 주고 받는 기능 말이다.



context.png


요렇게 구성되는데, 하나씩 보면,


CotextImpl Context 추상화한 function들을 실제로 구현한다.


ContextWrapper 모든 context function들을 감싸고 있으며, CotextImpl 클래스를 사용해서 실행시킨다.


attachBaseContext function 역할은 ContextWrapper context 오직 한번만 적용되도록 한다.


ContextThemeWrapper 요놈은 이름처럼, 앱으로부터 Theme (주제) 가져오거나 Manifest.xml 정의된 ‘android:theme’ 액티비티에 적용시키는 역할을 해준다.


Application Service Theme 없음.


빨간색 명이 초기화 , ContextImpl 생성되서 Context안의 function 수행시킨단다.


  1. 그러면 우리는 Context 몇갠지 계산가능


Number(Context) = Activity + Service + 1 (Application)



  1. Context 무엇을 있을까?


context1.png


이렇단다.



  1. Context 얻는 방법.


View.getContext() 하면 view 주체가 context (activity 부터 나온 context 겠지)


Activity.getApplicationContext() 하면  Application 전체의  context.


ContextWrapper.getBaseContext() 하면 내가 가진 Context 아닌 다른 Context 가져오려고 사용한단다.

ContextWrapper 경유해서 사용한단다.


getBaseContext() = this = getContext() 똑같음.



  1. 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
댓글
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31