iOS를 사랑하는 AOS 개발자

[Android] Context 본문

Android (이론)

[Android] Context

아사안개 2024. 6. 6. 23:17
반응형
SMALL

안녕하세요! 🙋🏻‍♀️

Android 의 Context 에 대해 간략하게 작성해봅니다.

📌 Context 란

- 어플리케이션의 현재 상태를 나타낸다.
- Activity 와 어플리케이션의 정보를 얻기 위해 사용할 수 있다.
- 리소스, 데이터베이스, Shared preference 등 접근하기 위해 사용할 수 있다.
- Activity와 어플리케이션 클래스는 Context 클래스를 확장한 클래스이다.

 

📌 Application Context

- Application Context 는 싱글톤 인스턴스이며, Activity 에서 `getApplicationContext()` 를 통해 접근할 수 있다.
- 해당 Context 는 Application 라이프사이클에 묶여있으며, 현재 Context 가 종료된 이후에도 Context 가 필요한 작업이나 Activity 스코프를 벗어난 Context 가 필요한 작업에 적합하다.
- 💡 ContentProvide 를 상속한 클래스에서 `getContext()` 를 통해 불러올 수 있는 Context 는 Application Context 이다.

✏️ Note
어플리케이션에서 싱글톤 오브젝트를 생성한 후 해당 오브젝트에 Context 가 필요하다면 Application Context 를 전달해야 한다.
Activity Context 를 전달하게 된다면 해당 오브젝트가 Activity 를 참조하기 때문에 Activity 가 화면에 표시되지 않는 순간에도 GC 가 진행되지 않아 메모리 누수가 발생한다.
또한, 어플리케이션 전체에서 사용할 라이브러리를 특정 Activity 에서 초기화 할 때에도 Application Context 를 전달하는 것이 좋다.
🚨 `getApplicationContext()` 를 사용하면 안되는 경우
- Application Context 는 Activity Context 가 제공하는 기능 전체를 제공하지 않는다. (GUI 와 관련된 Context 조작은 실패할 확률이 높다.)
- Application Context 가 사용자 호출로 생성된 Clean Up 되지 않은 객체를 가지고 있다면 메모리 누수가 발생할 수 있다. (Activity 객체는 GC 이 가능하지만, Application 오브젝트는 프로세스가 살아있는 동안 남아있다.)

 

📌 Activity Context

- Activity Context 는 Activity 내에서 유효한 Context 이다.
- 그러므로 Activity Lifecycle 과 연결되어 있다.
- Activity Context 는 Activity 와 함께 소멸해야 하는 경우 사용한다.

✏️ Note
Activity 와 Lifecycle 이 같은 오브젝트를 생성해야 할 때 Activity Context 를 사용한다.
📍 예시
Toast, Dialog 등 UI operation 에서 Context 가 필요할 때 사용해야 한다.

Application Context vs Activity Context

- Application Context 는 MyApplication, MainActivity1, MainActivity2 모두 사용 가능.
- MainActivity1 의 Context 는 MainActivity1 에서만 사용 가능. 
- MainActivity2 의 Context 는 MainActivity2 에서만 사용 가능.

틀린부분이 있거나, 궁금하신게 있거나, 그냥 아무말이나 하고싶으면 댓글 남겨주세요 🥴

봐주셔서 감사합니다 🥰

 

참고사이트

참고사이트

반응형
LIST

'Android (이론)' 카테고리의 다른 글

[Android] Annotation  (0) 2024.05.05
[Android] MainThread & Handler  (0) 2024.05.05
[Android] ANR 이란?  (0) 2023.09.10
[ Kotlin ] Kotlin 과 Java 차이점 1 - 변수와 자료형  (0) 2022.01.18
[Android] 안드로이드 Intent란?  (0) 2022.01.04
Comments