[Android/안드로이드/Context] ApplicationContext vs ActivityContext ?!!

2020. 5. 29. 16:32Android/깨알 개념 정리

갑자기 이 질문을 받았을 때 얼마나 당황했는지.. 

반성의 의미로 다시 차근차근 정리해보기


먼저, Context 란?

developers 사이트에 의한 개념은 이렇다 

 

  • 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.

 

해석 

 

  1. 어플리케이션 환경에 대한 전역 정보에 접근하기 위한 인터페이스, abstract 클래스이며 안드로이드 시스템에 의해 구현된다  
  2. Context를 통해 어플리케이션의 특화된 리소스나 클래스에 접근할 수 있을 뿐 아니라 application-level의 작업, Activity 실행, Intent 브로드캐스팅, Intent 수신 등과 같은 응용 프로그램 수준의 작업을 수행하기 위한 API를 호출할 수 있다.

즉, 현재 사용되고 있는 어플리케이션(액티비티)에 대한 전체적인 정보를 담고 있는 객체라 할 수 있다.

 

 


그렇다면 Application Context 와 Activity Context는 각각 무엇일까 

Context의 수명에 따라 구분

1. Application Context 

  • Application의 Life-Cycle을 따르며 어플리케이션 실행 - 종료까지 동일한 객체를 참조한다 

  • getApplicationContext(), getApplication() 으로 사용 가능하다

2. Activity Context 

  • 현재 Activity의 Life-Cycle을 따르며 Activity.onDestroy()가 호출될 때 소멸된다

  • getContext(), getBaseContext(), View.getContext(), MyActivity.this로 사용 가능하다 

 

Activity Context 는 null 오류를 발생시킬 수 있어 대체적으로 Application Context를 권장하고 있으나 다이얼로그(대화 상자), 액티비티 시작, layout inflate 등 필수적으로 Activity Context를 사용해야 하는 경우에는예외적으로 Activity Context 를 사용해 주어야 한다.