본문 바로가기
안드로이드/기초

[Android] Context란?

by 보우마스터 2024. 5. 6.

공식 문서에 따르면 Context는

💡 애플리케이션 환경에 대한 전역정보가 Context로 연결된다. Context는 구현이 Andorid 시스템에 의해 제공되는 추상클래스이다. 애플리케이션 별로 리소스 및 클래스에 대한 접근은 물론 Activity의 실행, 브로드캐스팅 및 Intent 수신과 같은 애플리케이션 레벨에 대한 호출을 허용한다.

 

Context : 애플리케이션의 현재 상태를 의미

사용목적

  • Resource, Database, SharedPrefernces 등의 시스템 자원을 얻을 수 있습니다.

(getPackageName(), getResource(),startActivity(),startService(), getSystemService()) 등 메소드를 필요

  • Application, Service, Activity 모두 Context를 상속 받아서 애플리케이션의 특정자원, 클래스, 애플리케이션의환경 정보에 대한 접근이 가능

 

 

 

 

Conext의 종류

Application Context

  • 싱글톤형식이며 getApplicationContext()를 통해 Activity에서 접근
  • 애플리케이션의 LifeCycle과 연결

Activity Context

  • 액티비티에서 사용가능하며 액티비티 라이프사이클과 연결되어 있다.
  • 액티비티 범위 내에서 Context를 전달하거나, LifeCycle이 현재 Context에 붙어 필요할때 사용

 

 

 

 

결론

  1. 다이얼로그를 호출
  2. Layout을 inflate 할때
  3. startActivity를 호출

제외하고는 Application Context를 사용하는게 좋습니다.

3가지 경우에 써야하는 이유

Application Context는 Activity Context가 지원하는 모든 것을 지원하지 않기 때문에, GUI와 관련된 모든것에 대해서 Application Context는 정상적으로 동작하지 않을 수 있습니다.

이유 : 메모리 누수 때문입니다.

설명 : 정적 객체(싱글톤형태)가 Activity Context를 참조할 경우, Activity는 LifeCycle에 따라 onDestroy()시 소멸됩니다. 하지만, 정적 객체가 Activity Context를 참조하고 있기 때문에 GC대상에서 제외됩니다. 이에 따라 메모리를 회수하지 못해 OOM(Out Of Memory)의 원인이 될 수 있습니다.

따라서 위의 언급한 3가지 경우를 제외하고는 applicationContext를 사용하는 편이 좋습니다.