Context 란
Android Studio에서 Context는 '맥락' 이라는 의미 그대로 응용프로그램의 현재 상태를 나타냅니다. 또한 데이터베이스, 기본 설정 및 문자열 및 이미지와 같은 정보를 제공합니다. 안드로이드 개발의 기본 개념이며 안드로이드 앱의 많은 부분에서 요구됩니다.
Context는 응용 프로그램이 기본 운영 체제와 상호 작용하고 다양한 리소스에 액세스할 수 있도록 하는 Android 시스템의 핸들로 생각할 수도 있습니다.
- 애플리케이션의 현재 상태를 나타낸다.
- 액티비티와 어플리케이션의 정보를 얻기 위해 사용할 수 있다.
- 리소스, 데이터베이스, shared preference 등에 접근하기 위해 사용할 수 있다.
- 액티비티와 애플리케이션 클래스는 Context 클래스를 확장한 클래스이다.
컨택스트는 다시 크게 Application Context, Activity Context로 나뉩니다:
Application Context 란
Application Context는 MyApplication, MainActivity1, MainActivity2 모두에서 사용할 수 있습니다. 애플리케이션 컨텍스트는 현재의 컨텍스트와 분리된 라이프사이클을 가진 컨텍스트가 필요할 때나 액티비티의 범위를 넘어서 컨텍스트를 전달할 떄에 사용합니다. 그 어떤 컨텍스트(Context)보다 오래 유지되는 컨텍스트(Context)가 필요할때에만 getApplicationContext()를 사용하십시오
애플리케이션 컨택스트는 싱글턴 인스턴스이며, 액티비티에서 getApplicationContext()를 통해 접근할 수 있습니다. 이 컨택스트는 짧은 Activity lifecycle 이 아닌 Application Lifecycle에 묶여있기 때문에 현재 컨택스트가 종료된 이후에도 컨택스트가 필요한 작업이나 액티비티 스코프를 벗어난 컨택스트가 필요한 작업에 적합합니다.
예를 들어, 애플리케이션에 싱글턴 오브젝트를 생성하고, 해당 오브젝트가 컨택스트가 필요하다면 항상 애플리케이션 컨텍스트를 전달하세요. 만약 액티비티 컨택스트를 전달한다면, 해당 오브젝트가 액티비티를 항상 참조하므로, 액티비티가 화면에 표시되지 않는 순간에도 가비지 콜렉션이 진행되지 않아 메모리 누수가 발생합니다.
애플리케이션 전체에서 사용할 라이브러리를 특정 액티비티에서 초기화한다면 어떤 Context를 전달해야 할까요? 당연히 Application Context입니다. getApplicationContext()는 딱 위와 같은 경우에만 사용하여야 합니다.
Activity Context 란
Activity Context는 activity 내에서 유효한 컨택스트입니다. 이 컨택스트는 액티비티 라이프사이클과 연결되어 있습니다. 액티비티 컨택스트는 액티비티와 함께 소멸해야 하는 경우에 사용합니다. 예를 들어, 액티비티와 라이프사이클이 같은 오브젝트를 생성해야 할 때 액티비티 컨택스트를 사용할 수 있습니다. 앱의 계층 구조는 다음 그림과 같습니다:
- MainActivity1의 Context는 MainActivity1에서만 사용할 수 있습니다.
- MainActivity2의 Context는 MainActivity2에서만 사용할 수 있습니다.
getApplicationContext 란
Android Studio에서 getApplicationContext()는 위에서 언급한대로 앱의 global application context를 반환하는 메서드입니다.
global application context는 전체 응용프로그램을 나타내는 컨텍스트 클래스의 인스턴스이며 특정 활동 또는 서비스에 연결되지 않습니다. 응용프로그램이 시작될 때 생성되고 응용프로그램이 종료될 때까지 존재합니다.
getApplicationContext()는 토스트 알림 만들기, 알람 매니저 또는 알림 매니저와 같은 시스템 서비스 액세스, 새 인텐트 개체 만들기와 같은 안드로이드 앱의 다양한 부분에서 사용할 수 있습니다.
주의해야 할 한 가지 중요한 점은 특히 Object를 장시간 잡고 있을 때 메모리 누수를 방지하기 위해 애플리케이션 컨텍스트를 주의 깊게 사용해야 한다는 것입니다. 응용 프로그램 컨텍스트는 단일 인스턴스이기 때문에 응용 프로그램이 종료될 때까지 연결된 개체는 메모리에 남아 있습니다. 따라서 활동이 삭제되면 삭제되므로 가능한 경우 활동 컨텍스트를 대신 사용하는 것이 좋습니다.
요약하자면, getApplicationContext()는 안드로이드 스튜디오에서 global application context를 반환하는 메서드로, 전체 앱에서 시스템 리소스와 서비스에 액세스하는 데 사용할 수 있습니다.
'개발 > Android Studio' 카테고리의 다른 글
[Android] sharedpreference (0) | 2023.03.17 |
---|---|
[Android Studio] 부팅시 service 구동하기 (0) | 2023.03.13 |
[Android Studio] IPC, RPC 차이점 (0) | 2023.03.13 |
[Android Studio] parcel, marshalling 이란 (0) | 2023.03.06 |
[Android Studio] Service 란, Service 생명주기 (0) | 2023.03.03 |