오늘은 안드로이드의 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
https://shinjekim.github.io/android/2019/11/01/Android-context%EB%9E%80/
https://arabiannight.tistory.com/284
'Android > Study' 카테고리의 다른 글
[Android] 모듈을 기반으로하는 클린 아키텍처를 셋팅 (0) | 2023.02.22 |
---|---|
[Android] Intent 란? (0) | 2023.02.03 |
[Android] Fragment 생명주기(Life Cycle) (0) | 2023.01.14 |
[Android] Clean Architecture(클린 아키텍처) 란 (0) | 2023.01.07 |
[Android] Android 란? (0) | 2023.01.04 |