HS_development_log

Android - Context 본문

Android

Android - Context

DevHyeonseong 2020. 5. 24. 16:47
반응형

1. Context : Android Developer

 

Interface to global information about an application environment. This is an abstract class whose implementation is provided by the Android system. It allows access to application-specific resources and classes, as well as up-calls for application-level operations such as launching activities, broadcasting and receiving intents, etc.

 

- 응용 프로그램 환경에 대한 모든 정보를 받을 수 있는 추상 클래스

- 따라서 Context가 없으면 Activity, Broadcast, Service 등... 모든 게 불가

- 리소스에 대한 접근도 Context를 통해서만 가능

- Context는 Abstract 클래스입니다.

 

 

1-2. Android에서 Context를 사용하는 이유

 

  • 안드로이드에서 프로세스와 애플리케이션은 서로 독립적으로 존재합니다.

  • 안드로이드에서 프로세스는 OS 커널(리눅스)에서 관리됩니다.

  • 애플리케이션에 관한 정보는 안드로이드 시스템 서비스 중 하나인 ActivityManagerService에서 관리합니다.

  • ActivityManagerService는 특정 토큰을 키값으로 Key-Value 쌍으로 이루어진 배열을 이용해 현재 작동 중인 애플리케이션 정보를 관리합니다.

  • 따라서 안드로이드에서 애플리케이션과 관련된 정보를 얻기 위해서는 ActivtiyManagerService를 통해 야만 합니다.

 

 

 

1-3. 결론 : Context

 

  • 자신이 어떤 애플리케이션을 나타내고 있는지 알려주는 ID역할

  • ActivityManagerService에 접근할 수 있도록 하는 통로 역할

 

따라서 Context는 process와 ActivityManagerService를 연결해주는 중간 매개체라고 할 수 있습니다. 또한 Context는 이 두 가지 역할을 수행함으로써

 

  • 애플리케이션에 관하여 시스템이 관리하고 있는 정보에 접근할 수 있게 함

  • 안드로이드 시스템 서비스에서 제공하는 API를 호출할 수 있는 기능

 

이 두 가지 기능을 사용자에게 제공합니다.

 

 

2. Context : 종류

 

2-1. ApplicationContext

 

 

  • 애플리케이션과 생명주기를 공유합니다. 따라서 애플리케이션이 살아있는 동안 변경되지 않으므로 싱글톤입니다.

  • getApplicationContext()를 통해 접근할 수 있습니다.

  • ApplicationContext에 액티비티를 참조하면 액티비티가 사라져도 참조가 유지되므로 메모리 누수가 발생합니다.
  • 액티비티를 벗어나거나 애플리케이션에 대해 참조를 오래 유지해야 할 경우 참조합니다.

 

2-2. ActivityContext

 

 

  • 액티비티와 생명주기를 공유합니다. 액티비티가 사라지면 Context도 같이 사라집니다.
  • getContext()를 통해 접근할 수 있습니다.
  • 액티비티에 관련된 정보를 사용하고 싶을 때 사용합니다.

 

3. Context : 마무리

 

Context를 활용하는 좋은 방법

  • 현재 작업 중인 컴포넌트에서 직접 사용할 수 있는 Context 사용

  • Context에 대한 참조가 해당 컴포넌트의 생명주기를 넘어서지 않으면 안전한 참조 유지 가능

  • 액티비나 서비스 이외의 객체에서 Context 참조 시 ApplicationContext사용

 

 

 

 

참고사이트

더보기
반응형

'Android' 카테고리의 다른 글

Android - View , ViewGroup  (0) 2020.07.17
Android - Thread  (0) 2020.07.17
Android - Activity Lifecycle  (0) 2020.06.29
Android - Fragment  (0) 2020.06.29
Android - Component  (0) 2020.05.24