일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- 알고리즘
- Behavior
- 안드로이드
- Algorithm
- HTTP
- Coroutine
- 백준
- ViewModel
- CoordinatorLayout
- Navigation
- kotlin
- View
- lifecycle
- CustomView
- recyclerview
- BOJ
- DataBinding
- room
- hilt
- 코틀린
- AppBarLayout
- LiveData
- sqlite
- notification
- CollapsingToolbarLayout
- Android
- onLayout
- activity
- onMeasure
- 알림
- Today
- Total
개발일지
Android in A..Z - Context 본문
Context (맥락)
Android Developer
Interface to global information about an application environment. This is an abstract class whose implementation is provided by the Android system. It allows access to application-specific resources and classes, as well as up-calls for application-level operations such as launching activities, broadcasting and receiving intents, etc.
번역
응용 프로그램 환경에 대한 글로벌 정보에 대한 인터페이스입니다. 안드로이드 시스템에서 구현이 가능한 추상 클래스입니다. 이를 통해 애플리케이션별 리소스 및 클래스에 액세스할 수 있을 뿐만 아니라, 시작 활동, 방송 및 수신과 같은 애플리케이션 수준 작업에 대한 업호출을 허용합니다.
즉 Context는 어플리케이션에 대한 정보 제공하는 Abstract Class이며 안드로이드 시스템으로 제공받습니다. 어플리케이션 정보를 가지고 있기 때문에 파일 디렉토리, 리소스, 패키지명 등을 얻을 수 있습니다.
Context 역할
안드로이드는 어플리케이션과 프로세스를 분리하여 사용합니다. 그 이유는 모바일 디바이스 특성상 하드웨어 자원이 부족한 경우가 생기는데, 하드웨어 자원이 부족한 경우 사용하지 않는 어플리케이션 전체를 제거하는 것이 아닌 사용하지 않거나 우선순위가 낮은 프로세스를 제거하는 것이 사용성을 높일 수 있기 때문입니다.
(같은 어플리케이션이라도 Activity가 종료되도 Background Service가 실행되는 경우가 있다.)
어플리케이션과 프로세스가 분리된 구조이기 때문에 프로세스에서 바로 Android Framework API를 호출할 수 없으며, 어플리케이션 정보가 필요한 작업이나, Android Framework API를 사용할 때 Context를 통해 처리해야 합니다.
Context 종류
- Application : 어플리케이션 LifeCycle을 갖는다.
- Activity : Activity의 LifeCycle을 갖는다.
- Service : Service의 LifeCycle을 갖는다.
Context 오용
1.
RoomDatabase같이 Singleton으로 선언하여 모든 영역에서 사용하는 인스턴스를 만들 때 Activity를 사용하는 경우 메모리 누수가 발생할 수 있다.
=> Activity가 종료되어도 RoomDatabase에서 Activity를 참조하기 때문에 GC가 메모리를 회수할 수 없다.
2.
그럼 마음 편하게 Application으로 모든 작업을 수행하면 될까? Dialog같은 경우 Application Context를 사용하면 에러가 발생한다. 뿐만 아니라 View를 생성하는 UI같은 작업도 에러가 발생한다. (Toast는 독립적이기 때문에 예외)
=> View와 Dialog같은 경우 UI정보가 필요하기 때문에 Activity Context를 사용해야 한다.
Context의 Scope를 주위하면서 사용해야 한다.
Context 종류별 가능한 작업
Application | Activity | Service | Broadcast Receiver onReceive |
|
Dialog | NO | YES | NO | NO |
Activity | (1) | YES | (1) | (1) |
Layout Inflatioin | (2) | YES | (2) | (2) |
Start a Service | YES | YES | YES | YES |
Bind a Service | YES | YES | YES | NO |
Send a Broadcast | YES | YES | YES | YES |
Register Broadcast | YES | YES | YES | YES |
Load Resource | YES | YES | YES | YES |
(1) : Intent.FLAG_ACTIVITY_NEW_TASK를 추가하면 가능하다.
(2) : 가능하지만, Application에서 정의한 theme가 아닌 시스템의 기본 theme를 따른다.
'Android (안드로이드)' 카테고리의 다른 글
Android in A..Z - WebView Bridge (0) | 2021.08.05 |
---|---|
Android in A..Z - Flow (0) | 2021.08.05 |
Android in A..Z - Constraint Layout (0) | 2021.08.04 |
Android in A..Z - OnTouchListener, GestureEvent (0) | 2021.07.18 |
Android in A..Z - ActivityResultContract (0) | 2021.05.23 |