Context란?

2022. 8. 5. 00:51카테고리 없음

Android Context 4줄 요약

  • 어플리케이션의 현재 상태를 갖고 있음
  • 시스템이 관리하고 있는 액티비티, 어플리케이션의 정보를 얻기 위해 사용
  • 안드로이드 시스템 서비스에서 제공하는 API (리소스, DB, Shared Preferences, 클래스, 어플 환경정보 등)에 접근하기 위해 사용
    ex) getResource() 같은 메소드
  • Activity, Application 클래스는 Context 클래스를 상속받은 클래스

Context의 잘못된 사용은 메모리 누수 문제로 이어질 수 있기 때문에 주의해야 합니다.

 


Context는 크게 두가지로 나눌 수 있습니다.
  1. Application Context
  2. Activity Context

 

Application Context
  • Application 라이프사이클에 귀속됨
  • Singleton instance (앱이 죽기 전까지 동일한 객체 반환)
  • getApplicationContext()로 접근
  • 어떤 Context보다도 오래 유지됨

 

Activity Context
  • Activity 라이프 사이클에 귀속됨
  • getContext()로 접근
  • Activity 범위 내에서 Context를 전달

 

계층 구조는 아래와 같습니다

 


메모리 누수 방지

MyApplication 클래스와 MyDB 싱글톤 객체가 있을 때, MyDB가 Context를 필요로 하는 경우, 어떤 Context를 넘겨 줘야 할까?

  • 정답 : Application Context
    만약 Activity Context를 전달했다면, MyDB는 싱글톤 객체 이므로 액티비티가 사용되지 않을때에도 해당 액티비티를 참조하고, 메모리 누수가 발생할 것입니다. 싱글톤 객체에서 Context를 필요로 하는 경우, 무조건 Application Context를 사용해야 합니다.

 

Toast, Dialog등의 UI 동작에 있어 Context가 필요하다면, 어떤 Context를 넘겨줘야 할까?

  • 정답 : Activity Context
    해당 UI 컴포넌트들은 어차피 Activity의 라이프 사이클에 종속되는 것들이기 때문에, Activity Context를 사용해주면 됩니다.