• 목록 (128)
    • Android (62)
    • Back-End (2)
    • Java (3)
    • Kotlin (16)
    • CS (7)
    • 개발 서적 (12)
    • 문제 풀이 (26)

최근 글

티스토리

전체 방문자
오늘
어제
hELLO · Designed By 정상우.
MJ_94

한 우물만 파는 기술 블로그

[Android] Context
Android

[Android] Context

2021. 9. 1. 11:30

Context는 어플리케이션 환경에 대해 글로벌 정보를 갖는 일종의 인터페이스로써 android 시스템에서 구현체를 제공하는 추상 클래스로
어플리케이션 별 리소스 및 클래스 접근에 사용되며, Actvity 실행, BroadCast, Intent 수신 등 어플리케이션 수준의 작업에 사용된다.

Context의 역할을 요약해보면 아래와 같다.

  1. 어플리케이션의 현재 상태를 나타낸다.
  2. 액티비티와 어플리케이션의 정보를 얻기 위해 사용할 수 있다.
  3. 리소스, 데이터베이스, shared preference 등에 접근하기 위해 사용한다.
  4. 액티비티와 어플리케이션 클래스는 Context 클래스를 확장한 클래스다.

Context는 여기서 두 종류로 나눠 볼 수 있다.
- Application Context
- Activity Context

먼저 Application Context는 싱글톤 인스턴스로 activity단에서 getApplicationContext()를 사용하여 접근할 수 있다.
또한 ContentProvider의 getContext()를 통해서도 접근할 수 있다.
이 Context는 해당 어플리케이션의 라이프 사이클에 종속되어 있으므로 activity 범위를 벗어난 Context가 필요한 시점에 사용하기에 알맞다.

Activity Context는 activity 라이프사이클에 종속된 Context다.
해당 context는 activity의 종료와 함께 소멸해야 하는 경우 사용하게 된다.

그럼 어떤 Context를 언제 사용해야하는걸까?

우선 database를 정의하는 싱글턴 A클래스에서 context가 필요하다고 생각해보자.

만약 activity의 context를 A에 전달할 경우 액티비티가 사용되지 않는 경우 A가 불필요하게 액티비티를 참조하므로 메모리 누수가 일어난다. 그러므로 싱글톤일 경우엔 항상 application context를 참조하도록 하는 게 옳다.

activity context의 경우에는 Toast, Dialog 등의 ui 동작에서 Context가 필요할 때 사용하는 게 맞다.

동작에 가장 밀접한 Context를 생각해서 쓴다면 구분에 큰 도움이 된다.

activity가 담당하는 역할은 ui에 대한 정의가 대부분이기 때문에 activity context를
그 외 리소스, 데이터베이스를 사용하는 경우는 application context가 담당한다고 생각하자.

저작자표시 (새창열림)

'Android' 카테고리의 다른 글

[Android] Gradient 배경 만들기  (0) 2021.12.27
[Android] RecyclerView DiffUtil  (0) 2021.12.01
[Android] Serializable과 Parcelable  (0) 2021.08.05
[Android] Mac M1 Room 라이브러리 에러  (0) 2021.07.30
[안드로이드] Android Architecture Components(AAC)의 LiveData  (0) 2021.03.18
    'Android' 카테고리의 다른 글
    • [Android] Gradient 배경 만들기
    • [Android] RecyclerView DiffUtil
    • [Android] Serializable과 Parcelable
    • [Android] Mac M1 Room 라이브러리 에러
    MJ_94
    MJ_94
    안드로이드, 개발 관련 기술 블로그

    티스토리툴바