Context란?
✔ 애플리케이션 환경에 대한 전체 정보를 받을 수 있는 추상 클래스
✔ 애플리케이션과 관련된 정보에 접근하거나 애플리케이션과 연관된 시스템 레벨의 함수를 호출할 때 필요
✔ 애플리케이션의 현재 상태
Context의 구조
✔ Context는 추상 클래스이므로 이를 사용하기 위해서는 구현 클래스가 필요하다.
✔ 기본적인 구현 클래스는 ContextImpl이지만, 이는 사용자에게 노출하지 않고 ContextWrapper로 감싸져 있다.
Context의 종류
Application Context
✔ 싱글톤 객체로 애플리케이션 전체의 생명 주기와 연결되어 있어 앱 시작부터 앱 종료까지 살아 있다.
✔ 현재 Context와 분리된 Context가 필요한 경우에 사용한다.
applicationContext
application
▫ Application도 Context의 자식이므로 Context처럼 사용할 수 있다.
Activity Context
✔ 액티비티 자체가 Context의 자식이기 때문에 액티비티 인스턴스 자체가 Context 역할을 한다.
✔ 액티비티의 생명 주기를 따르며, 액티비티 소멸 시 같이 소멸된다.
안드로이드 4대 Component의 Context
Activity
Service
✔ 생성될 때마다 각자 자신의 Context가 인스턴스가 생성된다.
Broadcast Receiver
✔ 자기 자신의 Context를 갖지 않는다.
✔ 브로드캐스트 처리를 할 때마다 Context를 onReceive()의 인자로 전달 받아서 사용한다.
✔ 전달 받은 Context의 생명주기를 따르기 때문에 액티비티 Context로 브로드캐스트 실행 시, 액티비티가 종료되면 브로드캐스트도 함께 종료된다.
Content Provider
✔ 자기 자신의 Context를 갖지 않는다.
✔ 동일한 응용 프로그램에 대해 호출 시 동일한 싱글톤 Context 객체를 반환하고, 서로 다른 응용 프로그램에 대해 호출 시 다른 Context를 반환한다.
Context 참조 방법
this
▫ Context의 자식인 액티비티를 반환하므로 액티비티를 Context처럼 사용할 수 있다.
▫ 현재 액티비티를 일반 클래스로 넘겨줄 때는 this를 사용하도록 하자.
this@MainActivity
▫ 액티비티 스코프를 벗어난 스코프 안에서는 반환할 Context의 자식을 명시해준다.
baseContext
▫ ContextWrapper의 Context 인스턴스를 반환한다.
▫ 다른 Context를 참조해야 하는 경우, 그 ContextWrapper 안에 있는 context를 baseContext로 가져와 사용한다.
view.context
▫ View가 속해 있는 액티비티의 Context가 해당 View의 Context가 된다.
'Android > Concept' 카테고리의 다른 글
[Android] [Kotlin] Object (0) | 2021.11.05 |
---|---|
[Android] [Kotlin] 파일 입출력 (0) | 2021.09.26 |
[Android] [Kotlin] Retrofit (0) | 2021.09.25 |
[Android] [Kotlin] 네트워크 (0) | 2021.09.25 |
[Android] [Kotlin] 콘텐트 리졸버 (0) | 2021.09.23 |