[안드로이드] Context 란

애플리케이션의 현재 상태의 맥락(context)를 의미한다.

컨텍스트는 새로 생성된 객체가 지금 어떤 일이 일어나고 있는지 알 수 있도록합니다.

따라서 액티비티와 애플리케이션에 대한 정보를 얻기 위해서는 컨텍스트를 사용하면 된다.

크게 2가지로 나누면 다음과 같다.

  1. 어플리케이션에 관하여 시스템이 관리하고 있는 정보에 접근하기

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

또한 컨텍스트는 시스템의 핸들과도 같다. 리소스, 데이터베이스, preferences 등에 대한 접근을 제공한다.

액티비티 객체는 컨텍스트 객체를 상속받는데, 액티비티가 현재 실행중인 환경에 대한 핸들 역할을 한다.

다른 플랫폼에서는 시스템 기능을 수행하기 위해 시스템 콜을 호출하는데 안드로이드에서는 Context를 이용해야만

유사한 일들을 수행할 수 있습니다.

안드로이드 개발에서 컨텍스트는 어디에나 있고, 가장 중요한 것입니다. 따라서 컨텍스트를 이해하고 올바르게 사용해야한다.

컨텍스트를 잘못 사용하는 것은 애플리케이션의 메모리 누수를 일으킬 수 있습니다.

Application Context

애플리케이션 컨텍스트는 싱글턴 인스턴스로 getApplicationContext()를 통해 접근할 수 있습니다.

이 컨텍스트는 애플리케이션의 라이프사이클과 연결되어 있습니다. 액티비티의 범위를 넘어서 현재의 컨텍스트와 분리된

라이프 사이클을 가진 컨텍스트가 필요할 때나 액티비티의 범위를 넘어서 컨텍스트를 전달할 때 사용합니다.

그 어떤 컨텍스트보다 오래 유지되는 컨텍스트가 필요할 때에만 어플리케이션 컨텍스트를 사용해야한다.

Activity Context

액티비티 컨텍스트는 액티비티에서 사용 가능하며, 액티비티 라이프사이클과 연결되어 있습니다.

액티비티의 범위 내에서 컨텍스트를 전달하거나, 라이프사이클이 현재의 컨텍스트에 붙은 컨텍스트가 필요할 때 액티비티 컨텍스트를 사용한다.

context로 인한 메모리 릭

  1. activity가 파괴되었는데도 static변수가 context를 참조하는 경우.

  2. staric 뷰를 선언하는 경우. 액티비티가 제거되어도 참조를 유지하여 메모리 릭

  3. AsyncTask를 익명으로 선언하고 객체화 하는 경우 액티비티가 종료되어도 액티비티 참조가 유지되어 액티비티가 gc되지 않는다.

등등등