목표
- Context란 무엇인지 이해한다.
- ApplicationContext와 ActivityContext의 차이에 대해 이해한다.
- 적절한 곳에 context를 사용할 수 있도록 한다.
Context
Context란 추상 클래스로, Application environment의 global한 정보에 접근하기 위한 인터페이스이다. Application environment의 global한 정보란 Application의 resource(getPackage(), getResource())나 Android 시스템에서 제공하는 API(startActivity(), startService(), getSystemService())에 대한 정보를 뜻한다. 구현은 안드로이드 시스템에 의해 제공되며, 앱 개발자가 직접 구현할 필요가 없다.
안드로이드 시스템에서 제공하는 Context는 두가지이다. 하나는 ApplicationContext이고, 다른 하나는 ActivityContext이다. 이제 아래에서 둘의 차이에 대해 알아보자
Application Context
Application Context란 Application과 관련된 Context를 뜻한다. Application의 Lifecycle을 따르며, Application이 살아있는 동안 변경되지 않는다. Singleton으로 구현되어 있어 중복으로 인스턴스가 생성되지도 않는다. Application이 살아있는 동안 살아있다.
하지만, Application Context에도 한계가 있는데, 바로 GUI와 관련된 작업은 불가능하다는 점이다. 예를 들어 Dialog를 띄우는 것 같은 GUI작업은 ApplicationContext로는 불가능하다. 단, Toast는 applicationContext를 이용해서 가능하다. GUI 작업중 유일하게 가능한 작업이다.
접근 방법
- applicationContext (getApplicationContext())
- application (getApplication())
Activity Context
Activity Context란 Activity와 관련된 Context이다. Activity의 Lifecycle을 따르며, Activity가 destroy될 때 같이 destroy되는 Context이다. Acitivity가 destroy되더라도 남아있어야 하는 참조라면 Activity Context가 아닌 Application Context를 이용해야 한다. 만약 그렇게 하지 않을 경우 해당 참조에서 NPE가 생길 수 있다.
Activity는 UI화면을 가지는 안드로이드 구성요소이다. Activitiy Context에서는 마찬가지로 GUI작업이 가능하다. 예를 들어 Dialog를 띄우는 등의 작업을 하기 위해서는 Activity Context를 사용해 작업해야 한다.
접근 방법
- baseContext (getBaseContext())