오늘은 안드로이드의 Context에 대해서 공부해보자.
Context란?
애플리케이션(객체)의 현재 상태의 맥락(context)를 의미한다.
- 어플리케이션에 관하여 시스템이 관리하고 있는 정보에 접근하기
- 안드로이드 시스템 서비스에서 제공하는 API를 호출 할 수 있는 기능
컨텍스트는 새로 생성된 객체가 지금 어떤일이 일어나고 있는지 알 수 있도록 한다. 따라서 액티비티와 애플리케이션에 대한 정보를 얻기 위해서는 컨텐스트를 사용한다.
또한 컨텍스트는 시스템의 핸들러와도 같다. 리소스, 데이터베이스, preferences 등에 대한 접근을 제공한다. 안드로이드 앱에서는 Activity가 존재하는데, 액티비티는 애플리케이션이 현재 실행중인 환경에 대한 핸들과도 같다. 액티비티 객체는 컨텍스트 객체를 상속 받으며, 액티비티는 애플리케이션의 특정 리소스와 클래스, 그리고 애플리케이션 환경에 대한 정보에 대해 접근할 수 있게 해준다.
Context의 종류
Application Context
- Application LifeCycle에 귀속됨
- Singletom Instance -> 앱이 죽기 전까지 동일한 객체를 반환
- getApplicationContext()로 접근
- 어떤 Context보다도 오래 유지됨
Activity Context
- Activity LifeCycle에 귀속됨
- getContext()로 접근
- Activity 범위 내에서 Context를 전달
애플리케이션 컨텍스트(Application Context)
애플리케이션 컨텍스트는 싱글턴 인스턴스이며 액티비티에서 getApplicationContext()를 통해 접근할 수 있다.
애플리케이션 컨텍스트는 현재의 컨텍스트와 분리된 라이프사이클을 가진 컨테스트가 필요할때나 액티비티의 범위를 넘어서 컨텐스를 전할 때에 사용합니다.
그 어떤 컨텍스트(Context)보다 오래 유지되는 컨텍스트(Context)가 필요할때에만 getApplicationContext()를 사용하자.
액티비티에서 라이브러리를 초기화해야 하는 경우, 액티비티 컨텍스트가 아닌 애플리케이션 컨텍스트를 전달해야한다.
액티비티 컨텍스트(Activity Context)
액티비티 컨텍스트는 액티비티에서 사용 가능하며 이 컨텍스트는 액티비티의 라이프사이클과 연결되어 있다.
액티비티의 범위 내에서 컨텍스트를 전달하거나, 라이프사이클이 현재의 컨텍스트에 붙은 컨텍스트가 필요할 때(need the context whose lifecycle is attached to the current context) 액티비티 컨텍스트를 사용한다.
Context는 언제 태어날까?
-> Context는 어플리케이션이 시작될 때 뿐만 아니라, 어플리케이션 컴포넌트들(Activity,Service)이 생성될 때마다 태어난다.
새롭게 생성되는 Context는 부모와 완전히 독립되어 있는 것이 아니라 거의 비슷한 내용들을 담고 있다.
Context의 중요성
컨텍스트를 잘못 사용한다면 애플리케이션에서 메모리 누수를 일으킬 수 있다.
- getApplicationContext()의 컨텍스트(Context)가 정리되지 않은 호출로 생성된 무언가를 유지하고 있으면 메모리 누수가 발생할 수 있습니다. 액티비티(Activity)를 사용하여 무언가를 가지고 있을떄, 액티비티(Activity)가 가비기 콜렉터에 의해 수집되면 다른 모든 것들도 같이 flush됩니다. 애플리케이션(Application) 객체는 프로세스 수명 동안 유지됩니다.
참고 :
https://gwi02379.tistory.com/16
[Android] Context란?
Android 개발을 하다 보면 Context라는 것을 굉장히 많이 쓰게 되는데요 항상 자연스레 쓰기만 했던 공기같은 존재라서 오히려 눈에 띄지 않았는데, 많이 쓰는 만큼 중요한 것이라 이번 기회에 Context
gwi02379.tistory.com
https://shinjekim.github.io/android/2019/11/01/Android-context%EB%9E%80/
[Android] 안드로이드 Context란? · Challengist
[Android] 안드로이드 Context란? 01 Nov 2019 | Android 이 글은 MindOrks의 Understanding Context In Android Application을 (나름대로) 번역한 글입니다. 잘못된 부분이 있으면 언제든지 알려주세요. 안드로이드에서 컨
shinjekim.github.io
https://arabiannight.tistory.com/284
안드로이드/Android Context 란?
안드로이드/Android Context 란? Android Context Story 저에게 안드로이드 Context 는 참 어려운 녀석입니다. 안드로이드 어플리케이션을 개발하며서 가장 빈번하게 사용되는 클래스 중 하나인건 분명한데,
arabiannight.tistory.com
'Android > Study' 카테고리의 다른 글
[Android] Coroutine(코루틴) 간단 정리 (0) | 2023.04.27 |
---|---|
[Android] 모듈을 기반으로하는 클린 아키텍처를 셋팅 (0) | 2023.02.22 |
[Android] Fragment 생명주기(Life Cycle) (0) | 2023.01.14 |
[Android] Clean Architecture(클린 아키텍처) 란 (0) | 2023.01.07 |
[Android] Android 란? (0) | 2023.01.04 |