공식 문서에 따르면 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에 붙어 필요할때 사용
결론
- 다이얼로그를 호출
- Layout을 inflate 할때
- 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를 사용하는 편이 좋습니다.
'안드로이드 > 기초' 카테고리의 다른 글
[Android/Compose] TextToSpeech(tts) 구현하기 (0) | 2024.05.17 |
---|---|
[Android] Android Version들 간의 호환성 관계 (0) | 2024.05.09 |
[Android] targetSdkVersion, compileSdkVersion,minSdkVersion (1) | 2024.05.07 |
[Android] Gradle이란? (0) | 2024.05.06 |
[Android] Intent란? (0) | 2024.05.06 |