프로그래밍/Android

Context

우끼우끼몽키 2017. 2. 21. 14:50

Context 란 ?

  • Context 란 현재 사용되고 있는 Application (또는 Activity)에 대한 포괄적인 정보를 지니고 있는 객체.  (Activity는 Context 상속)
  • Application에 관하여 시스템이 관리하고 있는 정보에 접근 - getPackageName(), getResource() 등
  • 안드로이드 시스템 서비스에서 제공하는 API를 호출 할 수 있는 기능 - startActivity(), bindService() 등  

 

Application Context

  • 하나의 Application 이 실행되어 종료될 때까지 동일한 객체(애플리케이션의 environment에 대한 전역 정보) - application life-cycle
  • 자신이 어떤 Application을 나타내고 있는지 알려주는 ID 역할
  • 실행중인 어플리케이션 프로세스는 Singletone instances로써,  Activity나 Service에서는 getApplication(), getApplicationContext()로 Context를 얻어 올 수 있다. 프로세스내 동일한 instances를 받게 된다. 

 

Activity Context

  • Activity 가 onDestroy() 가 실행된 경우 사라질 수 있는 객체 - activity life-cycle
  • ContextWrapper를 상속받아 구현한 Context이며 메소드로 Context를 얻어 오면 기본 Context로 구성되어 있다. 프레임워크는 Activity또는 Service가 실행 될때 기본 Context에다 필요한 정보를 warp한다. 실행시 고유한 Context를 가지게 된다. 

  

BroadcastReceiver 

위의 2가지와 다르게 자기자신이 Context자체는 아니다. 하지만 onReceive()시 Context를 가져올 수 있는데, 이때의 Context는 ReveiverRestrictedContext이며 두가지 기능 registerReceiver()와 bindService()를 사용 할 수 없다. 리시버가 브로드캐스트를 처리 할때마다 새로운 Context가 생성 된다. 

 

ContextProvider 

브로드캐스트와 마찬가지로 자기자신이 Context를 상속 받은것은 아니다. 하지만 액세스후 getContext()를 통해 Context를 가져 올 수 있다.

ContextProvider가 동일한 응용프로그램에 대해 호출시, 동일한 응용프로그램의 Singletone instances를 반환하게 된다. 하지만 별도의 프로세스에 있는 경우(서로다른 다른 앱), 프로바이더가 실행되는 응용프로그램의 instances가 반환된다. 

 

Context 가져오기

  • View.getContext()

현재 실행되고 있는 View의 context를 return 하는데 보통은 현재 활성화된 Activity의 context가 된다.

  • Activity.getApplicationContext()

Application의 Context가 return된다. 현재 Activiy의 context 뿐만 아니라 Application의 lifeCycle에 해당하는 Context가 사용된다.

  • ContextWrapper.getBaseContext()

자신의 Context가 아닌 다른 Context를 access하려 할 때 사용. ContextWrapper는 getBaseContext()를 경유해서 Context를 참조할 수 있다.

  • this

View.getContext()와 같다.

 

뷰를 수정하거나 할 때는 Activity Context 를, 그 외에는 Application Context 사용

'프로그래밍 > Android' 카테고리의 다른 글

안드로이드 생명주기  (0) 2017.04.30
잡지식  (0) 2017.04.29
개발환경 설정  (0) 2017.04.27
안드로이드 권한  (0) 2017.02.24