-
Context 는 Android API 중 가장 잘못 design 된 녀석이다.
Android 에서 신과 같은 object 이다..
-
Android 는 component 들을 갖고 있다.
Activity, Service, BroadcastReceiver, ContentProvider.
Android OS 자체도 component 들을 가지고 있다. WifiManager, Vibrator, PackageManager 등등..
그리고 Resource 라는 녀석도 있다.
Context 를 간단히 이야기하면 component 간의 다리 역할을 하는 component 이다.
context 를 통해 component 간의 communication, instantiate, access 등을 할 수 있다.
-
Context 는 UI-Context 와 Non-UI Context 로 구분할 수 있다.
-
UI Context 는 ContextThemeWrapper 이다.
Activity 는 ContextThemeWrapper 를 상속했다.
그래서 layout xml 을 inflate 할 때 view 에 theme 이 입혀져 있다.
만약 Non-UI context 로 inflate 하면 theme 이 먹지 않는다.
-
ContextThemeWrppaer 가 아닌 녀석은 Non-UI Context 라고 보면 된다.
Application context, Broadcast, Service 에 전달되는 context 가 모두 이것이다.
Non-UI Context 는 application context 를 제외하면 모두 수명이 짧다.
-
UI 관련된 것에 접근하려면 UI-Context 를 사용하면 된다.
그 외에는 Non-UI Context 를 사용하라.
short-living context 를 long-living object 에 전달하지 말아라. memory leak 이 생기기 쉽다.
-
Configuration configuration = getResources().getConfiguration();
configuration.setLocale(your_custom_locale);
context = createConfigurationContext(configuration);
위와 같은 코드를 통해서 특정 환경의 context 에 접근할 수 있다.
-
ContextThemeWrapper ctw = new ContextThemeWrapper(this, R.style.YOUR_THEME);
ThemedContext 도 만들 수 있다.
-
@Override
protected void attachBaseContext(Context base) {
super.attachBaseContext(useYourCustomContext);
}
위와 같이 baseContext 를 바꿀 수 있다. (일종의 delegate)
-
참고 자료 : https://medium.com/@gaurav.khanna/mastering-android-context-7055c8478a22
끝
'프로그래밍 놀이터 > 안드로이드, Java' 카테고리의 다른 글
[android] 국제화 text style 입히기 (0) | 2021.01.27 |
---|---|
[android] finishAffinity() 와 finishAndRemoveTask() 에 대하여 with 실험 (0) | 2021.01.27 |
[android] ViewModel & LiveData 의 pattern & anti-pattern (0) | 2021.01.22 |
[android] ViewModel 에 대해 알아보자 (0) | 2021.01.21 |
[android] LiveData 에 대해 알아볼까 (0) | 2021.01.20 |
댓글