Context

woniwon·2024년 3월 18일
0

Android

목록 보기
3/19
post-thumbnail

Context

  • 애플리케이션 현재 상태의 맥락(Context)를 의미
  • 애플리케이션과 액티비티에 대한 정보를 얻기 위해 사용하는 것

역할

  1. 앱에 관해 시스템이 관리하고 있는 정보에 접근 (resource, class, 애플리케이션 환경 정보)
  2. 안드로이드 시스템 서비스에서 제공하는 API 호출 (startActivity(), bindService())

Context의 종류

  1. Application Context

    • 싱글턴 인스턴스로, getApplicationContext() 를 통해 접근할 수 있다.
    • 오래 유지되는 Context
    • 앱의 라이프 사이클과 연결되어 있으며, Application Context는 현재의 Context와 분리된 라이프 사이클을 가진 Context가 필요할 때나 액티비티의 범위를 넘어 Context를 전달할 때 사용
    • Application이 살아있는 동안 동일한 1개 객체 반환하고 변경되지 않음
  2. Activity Context

    • Activity의 생명주기에 귀속되며, Activity가 destroy 될 때 같이 destroy 됨
    • getContext() 를 통해 접근
    • Activity가 종료 되었을 때도 남아있어야 한다면 Activity Context가 아닌 Application Context를 사용해야함

    Context 사용

    데이터베이스를 관장하는 AppDatabase 처럼 싱글톤으로 존재하는경우 초기화할때 context가 필요하게 되는데 그때 activity context로 전달하게 된다면 Activity의 생명주기에 따라 어느 시점에 context는 소멸이 될것이다.

    하지만 AppDatabase는 싱글톤이기 때문에 해당 Activity Context를 지속적으로 참조하게 되어 메모리 누수가 발생되게 된다. 이럴때는 Application Context 를 사용하는것이 바람직하고

    GUI에 관련된 것들에는 Application Context가 정상적으로 동작하지 않을 수 있기 때문에 무조건적으로 Application Context를 쓰는것 또한 바람직하지 않다.

    생명주기에 따른 범위(Scope)를 명심하여 Context를 참조하여야 한다.

    Dialog와 같이 Activity상의 UI를 제어해야 할 부분이 있다면 ActivityContext (this@ActivityName)을 사용하는 것이 올바르다.

profile
단순 기록용 Velog 입니다.

0개의 댓글