Context란?
안드로이드에서 Context는 애플리케이션의 현재 상태 및 환경에 대한 정보를 알 수 있다.
Context 역할
1. 애플리케이션 환경 정보
Context는 현재 애플리케이션의 상태 및 환경 정보를 확인할 수 있다.
예를 들어, 리소스, 애플리케이션 패키지 정보, 환경 설정, 네트워크 연결 정보 등을 얻을 수 있다.
2. 액티비티 및 서비스 시작
Context를 사용하여 액티비티 또는 서비스를 시작한다.
새로운 액티비티를 시작하거나 서비스를 시작하려면 Context를 사용한다.
3. 리소스 액세스
애플리케이션의 리소스(레이아웃, 문자열, 이미지 등)에 액세스할 때 Context가 필요하다.
getResources() 메서드를 통해 리소스에 접근한다.
4. 패키지 정보
Context를 통해 애플리케이션의 패키지 정보(패키지 이름, 버전, 서명 등)를 가져올 수 있다.
5. 시스템 서비스 사용
Context를 사용하여 시스템 서비스(예: 알림 관리자, 알람 서비스, 저장소 서비스)를 가져오고 사용한다.
Context는 안드로이드 애플리케이션 내에서 사용할 수 있으며, 대부분의 컴포넌트(액티비티, 서비스, 브로드캐스트 수신자)와 애플리케이션에서 사용할 수 있다. 앱의 상태 및 환경 정보를 얻거나 다른 컴포넌트와 통신할 수 있다.
Context 종류
1. 애플리케이션 컨텍스트(Application Context)
- 전체 애플리케이션에 대한 컨텍스트를 나타낸다.
- 앱의 라이프사이클과 관련이 있으며, 앱이 실행되는 동안 유지된다.
- 여러 액티비티에서 공유할 수 있는 전역 컨텍스트이다.
- 앱의 전반적인 설정, 리소스 액세스 및 시스템 서비스에 접근할 수 있다.
val appContext = applicationContext // 애플리케이션 컨텍스트 가져오기
val resource = appContext.resources // 리소스 액세스
val sharedPrefs = appContext.getSharedPreferences("my_prefs", Context.MODE_PRIVATE) // 공유 프리퍼런스 액세스
2. 액티비티 컨텍스트(Activity Context):
- 액티비티와 관련된 컨텍스트를 나타낸다.
- 액티비티의 라이프사이클과 관련이 있으며, 액티비티가 활성화되어 있는 동안 유지된다.
- 액티비티의 UI 요소에 접근하고 액티비티 관련 작업을 수행하는 데 사용한다.
val activityContext = this // 액티비티 컨텍스트 가져오기
val layoutInflater = LayoutInflater.from(activityContext) // 레이아웃 인플레이터 사용
val databaseHelper = MyDatabaseHelper(activityContext) // 액티비티에서 사용하는 데이터베이스 도우미
애플리케이션 컨텍스트는 앱 전체에서 사용되는 전역 컨텍스트로 사용한다.
액티비티 컨텍스트는 액티비티와 관련된 작업에 사용한다.
애플리케이션 컨텍스트는 액티비티 컨텍스트에 비해 더 오래 지속되며, 앱의 전반적인 설정과 리소스에 접근할 수 있다.
startActivity
activity를 실행하기위해 startActivity() 메서드를 호출한다.
startActivity는 activitiy 클래스에 있는 메서드이다.
그렇다면 activity를 상속받지 않은 어플리케이션 컨텍스트에서는 startActivity를 호출하지 못하는건가?
정답은 "호출할 수 있다" 이다.
그 이유는 activity 클래스와 application 클래스 모두 다 context 클래스를 상속 받고 있기 때문이다.
activity -> ContextThemeWrapper -> ContextWrapper -> Context
application -> ContextWrapper -> Context
결국에는 Context를 상속받은 클래스는 모두 호출이 가능하긴 하지만 브로드캐스트리시버와 컨텐츠 프로바이더는 화면을 가지지 않는 상태에서 실행되므로, startActivity()를 호출하더라도 액티비티 화면이 표시되지 않을 수 있다.
'안드로이드' 카테고리의 다른 글
안드로이드 WorkManager, Work 고찰 (0) | 2024.01.08 |
---|---|
안드로이드 JVM과 ART, DVM의 차이 (0) | 2023.10.17 |
안드로이드 Serializable와 Parcelable (0) | 2023.10.17 |
안드로이드 Room (0) | 2023.10.09 |
안드로이드 Hilt (0) | 2023.10.09 |