"앱이 흘러가는 맥락"
== "어플리케이션, 액티비티의 현재 상태 정보"를 의미한다고 볼수 있다.
안드로이드 시스템 서비스에서 제공하는 API(Shared Preferences, Toast, Resource, DB(Room)) 등 context를 필요로 한다.
Application Context 와 Activity Context 두 가지가 존재한다. 이 두 가지를 잘 구분해서 사용할 필요가 있다. Context를 올바르게 사용하지 못하면 메모리 누수가 발생하게 되므로 주의해서 사용할 필요가 있다.
: 어플리케이션 전역에 컬쳐 사용이 가능한 context 이다.
앱은 기본적으로 하나의 Application 에 하나 이상의 Activity로 구성이 된다. Activity는 한 화면에 하나만 존재할 수 있지만 Application은 앱이 실행되고 완전히 꺼지기 전까지 유지되고 Application을 상속한 Application 과 각 Activity는 Application Context 사용이 가능하고 이는 중간에 바뀌거나 새로 생성되지 않는다.
각 Activity에 종속되지 않는, 싱글 인스턴스 형태의 클래스로 소멸될 일이 없는 context가 필요시 될때 Application Context를 사용한다.
Toast, Dialog 등 View와 관련된 동작에 context가 필요할 때는 적합하지 않다. view는 Activity 라이프사이클에 포함되어야 한다.
또한, application context를 사용한 객체가 사용된 이후에도 메모리가 해제되지않고 쌓여 메모리 릭을 발생할 가능성이 높다.
: 각 Activity 마다 갖고 있는 context 이다.
하나의 화면에 하나의 Actvity가 존재할 수 있고, 현재의 Actvity가 다른 Activity로 이동하기도 한다. 이때 마다 현재의 Activity의 정보를 담고있는 context가 생성되고 소멸된다.
Activity 라이프사이클을 따르는 객체, View와 관련된 UI 동작에 Activity Context를 사용한다.
앱 전역에 사용되는 싱글톤 객체에 사용하게 되면 존재하지 않는 context를 사용하게 됨으로써 에러를 발생하게 된다.
Application Context : 앱 전역에 사용되는 싱글톤 객체
Activity Context : 액티비티 라이프사이클에 종속되는 UI와 같은 객체