-
[Android] Android Context란?안드로이드 2022. 2. 7. 13:30728x90반응형반응형
안드로이드 개발을 하다 보면 Parameter로 Context를 빈번하게 넘겨주게 됩니다.
하지만 이 Context가 뭔지도 모르고서 계속 사용하다가 Context를 잘못 사용 시 메모리 누수가 쉽게 발생하게 됩니다.🤦🏻♂️
그래서 Context가 무엇인지, 어떻게 사용해야 하는지에 대해서 알아보았습니다.
Context란
- 애플리케이션의 현재 상태
- Activity와 Application에 대한 정보를 얻는 데 사용
- Resource, Database 및 Shared Preference에 대한 액세스 권한을 얻는 데 사용할 수 있다.
- Activity 및 Application 클래스 모두 Context 클래스 확장한 클래스
Context의 종류
- Application Context : 싱글톤 인스턴스이며 getApplicationConetxt()를 통해 Activity에서 접근할 수 있습니다. 이 Context는 Application의 생명 주기와 연결되어있습니다. Application Context는 생명주기가 현재 Context와 분리된, 즉 현재 Context가 종료된 이후에도 Context가 필요한 작업이나 Activity Scope를 벗어난 Context가 필요한 작업에 사용할 수 있습니다.
- Activity Context : Activity에서 사용할 수 있습니다. 이 Context는 Activity의 생명주기와 연결됩니다. Activity Scope내에서 Context를 전달하거나 현재 Context에 생명주기가 연결된 Context가 필요할 때 Activity Context를 사용해야 합니다.
Content Provider에서는 getContext()를 통해 Application Context를 얻을 수 있습니다.
앱 계층 구조👀
Application 계층에서는 Application Context만 있는 상태입니다.
Activity 계층에서는 각각의 Activity에 해당하는 Activity Context와 해당 Activity가 속해있는 Application의 Application Context가 존재합니다.
언제 어떻게 사용하는가?🤷🏻♂️
Toast메시지, Dialog 등과 같은 UI 조작이 필요한 경우 Activity Context를 사용해야 합니다.
Application Context는 사용할 객체가 Application에서 초기화되거나 singleton인 경우에 사용합니다.
계층 구조 상 항상 사용 가능한 가장 가까운 Context를 선택하는게 좋고, 싱글톤인 경우 Application Context를 사용해야 한다고 합니다.
getApplicationConetxt() 사용 시 주의점🚫
- Application Context는 Activity Context가 제공하는 기능 전체를 제공하지 않습니다. 특히 GUI와 관련된 Context 조작은 실패할 확률이 높습니다.
- Application Context가 사용자 호출로 생성된, clean up 되지 않은 객체를 가지고 있다면 메모리 누수가 발생할 수 있습니다. Activity 객체는 메모리 관리가 가능하지만 Application 객체는 프로세스가 살아있는 동안 남아있습니다.
출처
https://blog.mindorks.com/understanding-context-in-android-application-330913e32514728x90반응형'안드로이드' 카테고리의 다른 글
[Android] LiveData란 (0) 2022.02.24 [Android]Glide 라이브러리를 통해 이미지 Load하기 (0) 2022.02.11 [Android] SwipeRefreshLayout과 ScrollView 동시 사용시 문제 (0) 2022.01.24 [Android] Kotlin의 coroutine (0) 2022.01.20 [Android] Fragment LifeCycle (0) 2022.01.12