본문 바로가기
프로그래밍 놀이터/안드로이드, Java

[android] context 마스터 하기!

by 돼지왕 왕돼지 2021. 1. 26.
반응형

 

 

-

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

 

Mastering Android context

Context in Android is one of the most used and abused objects. But most of the articles on the web focus on the definition of what it is. I…

medium.com

 

 

 

 

 

반응형

댓글