[Android] Context란

mingsso·2023년 9월 19일

Android

목록 보기
2/12

Context의 개념

애플리케이션 환경에 대한 전역적인 정보를 얻을 수 있는 추상 클래스

  • 애플리케이션의 현재 상태를 가지고 있음
    • 안드로이드 앱은 여러 개의 화면으로 구성되어 있고, 각 화면은 해당 화면의 정보를 가지고 있는 context를 가지고 있음
  • 액티비티나 애플리케이션에 대한 정보를 얻을 때 사용함
    • 특정 화면의 context는 사용자가 특정 액티비티 또는 프래그먼트에 있음을 간주하고, context를 사용해 화면과 관련된 작업을 할 수 있음
  • 리소스, Local Database 등에 로컬 저장소에 접근하기 위해 사용할 수 있음
    • 각 화면에 대한 context를 사용해 데이터베이스의 데이터를 화면에 표시할 수 있음
  • 액티비티와 애플리케이션 클래스는 기본적으로 context를 상속함
  • context는 잘못 사용하면 메모리 누수가 발생할 수 있음



Context의 종류

1️⃣ Application Context

애플리케이션 자체의 Context로, 하나의 애플리케이션 당 1개가 존재함

  • Activity에서 applicationContext(getApplicationContext())를 통해 얻을 수 있음
  • 애플리케이션의 라이프사이클과 묶여있어, 현재 Context가 종료되고 나서도 Context가 필요한 작업이나 액티비티 범위를 벗어난 곳에 Context가 필요할 경우 적합함

    • 애플리케이션 전역에서 사용할 어떤 라이브러리를 MainActivity에서 초기화할 때, Context가 필요할 경우 Application Context를 넘겨줘야 함
    • 만약 Activity Context를 넘겨주게 되면, MainActivity에 대한 참조가 메모리 상에서 GC되지 않아 메모리 누수가 발생함

🤔 내가 예전에 TMap API를 사용하면서 작성한 코드인데, 애플리케이션 전역에서 사용할 tMapView에 Activity Context를 넘겨주고 있었다

override fun onAttach(context: Context) {
	super.onAttach(context)
	mapActivity = context as MapActivity
}

val tMapView = TMapView(mapActivity)
tMapView.setSKTMapApiKey(getString(R.string.tmap_api_key))

Application Context로 고쳐주었다
(추가 예정)



2️⃣ Activity Context

특정 액티비티 안에서만 사용 가능한 Context로, Activity의 라이프사이클에 종속되어 있음

  • this 또는 getBaseContext(), getContext()로 얻을 수 있음
  • Activity가 소멸될 때 같이 소멸됨
  • Toast나 Dialog 같은 UI 관련 작업을 위해 주로 사용함






참고자료

https://velog.io/@haero_kim/Android-Context-%EB%84%88-%EB%8C%80%EC%B2%B4-%EB%AD%90%EC%95%BC
https://parkjh7764.tistory.com/151
https://velog.io/@jeongminji4490/Android-Context

profile
🐥👩‍💻💰

0개의 댓글