안드로이드 개발을 하다보면 Context를 자주 사용하게 된다. 하지만 정확한 개념에 대해 알지 못하고 사용하고 있었고,
이번 포스팅을 통해 확실하게 이해하기 위해 Context에 대해 알아보고자 한다.
Context
Interface to global information about an application environment. This is an abstract class whose implementation is provided by the Android system. It allows access to application-specific resources and classes, as well as up-calls for application-level operations such as launching activities, broadcasting and receiving intents, etc.
- Application 환경에 대한 전역 정보를 접근하기 위한 인터페이스이다.
- 추상 클래스이며 실제 구현은 Android 시스템에 의해 제공된다.
- 이를 통해 application 특화 리소스나 클래스 뿐만 아니라 Activity 런칭, 브로드캐스팅, intent 수신 등과 같은 application-level operation을 위한 up-call에 접근할 수 있다.
Context의 중요한 POINT
- 애플리케이션의 현재 상태를 나타냄
- 액티비티와 어플리케이션의 정보를 얻기 위해 사용할 수 있음
- resource, database, shared preference 등에 접근하기 위해 사용할 수 있음
- Activity와 Application 클래스는 Context 클래스를 확장한 클래스
잘못된 Context 사용은 메모리 누수를 쉽게 일으킬 수 있기 때문에 이 개념에 대해 잘 이해해야 한다고 말하고 있다.
2가지 타입의 context
Application Context
- Singleton 인스턴스 이며, Activity에서 getApplicationContext()를 통해 액세스할 수 있음
- Application의 life-cycle과 연결됨
❇️ Application Context의 적합한 사용
- 현재 context의 life-cycle과 분리된 context가 필요한 경우 (현재 context가 종료된 이후에도 사용)
- Activity의 scope를 벗어난 context가 필요한 경우
ex) Application 전체에서 사용할 라이브러리를 특정 activity에서 초기화한다면 application context를 사용해야 함
ex) Application에 singleton object를 생성하고, 해당 object가 context가 필요하다면 항상 application context를 사용해야 함
→ Activity context를 사용한다면 singleton object가 사용될 때마다 Activity를 참조하게 되고 garbage collection이 제대로 이루어지지 않으므로 메모리 누수가 일어나게 된다.
❓ContentProvider의 getContext()
앱이 다른 앱과 데이터를 공유하는 것을 도와주는 ContentProvide의 getContext()로 불러올 수 있는 context는
Application Context 입니다.
Activity Context
- Activity 내에서 유효한 context
- Activity의 life-cycle과 연결됨 → Activity의 onDestroy()와 함께 context도 사라짐
❇️ Activity Context의 적합한 사용
- Activity와 life-cycle이 같은 object를 생성해야 할 때
ex) Activity 내에서 Toast, Dialog 등 UI operation에서 context가 필요하다면 activity context를 사용해야 함
App의 계층구조
- MyApplication은 가장 가까운 Context인 Application Context만 사용할 수 있음
- MainActivity1
- 가장 가까운 Context는 Activity Context
- Activity Context(MainActivity1)와 Application Context를 사용할 수 있음
- MainActivity2
- 가장 가까운 Context는 Activity Context
- Activity Context(MainActivity2)와 Application Context를 사용할 수 있음
👍Rule of Thumb
대부분의 경우, 가장 가까운 scope에 해당하는 context를 사용하는 것이 좋다.
참조가 해당 컴포넌트의 life-cycle을 넘어가지 않는 이상 메모리 누수 걱정 없이 컴포넌트를 유지할 수 있다.
reference >
- https://shnoble.tistory.com/57
- https://arabiannight.tistory.com/entry/272
- https://roomedia.tistory.com/entry/Android-Context%EB%9E%80-%EB%AC%B4%EC%97%87%EC%9D%BC%EA%B9%8C
- https://blog.mindorks.com/understanding-context-in-android-application-330913e32514
- 이미지 reference : https://blog.mindorks.com/understanding-context-in-android-application-330913e32514
'ANDROID > Android 앱 프로그래밍' 카테고리의 다른 글
[Android] 위젯 속성 지정하는 헷갈리는 코드 (feat. Kotlin) (0) | 2022.03.04 |
---|---|
[Android] FCM 푸시 알림(Notification) (0) | 2022.02.07 |
[Android] 백그라운드 작업 (0) | 2022.01.27 |
[Android] Application 클래스 (0) | 2022.01.10 |
[Android] 뷰 바인딩(View Binding) in Activity, Fragment, RecyclerView (0) | 2021.08.10 |
[Android] 데이터베이스(Database)와 내용 제공자(Content Provider) (0) | 2021.07.06 |
[Android] 모바일 데이터베이스(Database)와 테이블(Table) 생성 (3) | 2021.07.04 |
[Android] Retrofit2를 사용한 API 통신 (0) | 2021.07.04 |
댓글