일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
- Android
- scrolling tab
- pod install
- 기존 앱
- convert base64
- swift
- swift #swift keychain #keychain 사용법
- url 추적
- Side Menu
- url 관찰
- ios
- Swift Package Manager
- base64 변환
- SwiftUI
- 스크롤 탭
- DataBinding
- List
- 개발자 면접
- development language
- GeometryReader
- UIViewControllerTransitioningDelegate
- 상단 탭바
- Tuist
- transformation.map
- ViewBuilder
- oberve url
- notifychanged
- UIPresentationController
- DevelopmentRegion
- detect url
- Today
- Total
버그 잡이
[android] context란? context 올바르게 사용하기 본문
context란?
1. getPackageName(), getResource(), startActivity(), startService()와 같은 다양한 메서드를 사용해 시스템 리소스 및 다른 컴포넌트에 대한 접근을 가능하게 합니다.
2. 현재 실행중인 환경에 대한 정보를 담고 있는 ID카드이기도 합니다.
(startActivity로 새로운 액티비티를 실행하면 이 액티비티는 이전 액티비티의 context정보를 가지고 있습니다.)
context를 왜 알아야하는가?
- android 개발에 있어서 context는 거의 모든 곳에서 쓰이는데 이를 잘 못 사용하면 메모리 누수로 이어집니다.
context의 종류
Application Context
어플리케이션의 생명주기와 연관되어 있습니다. 즉, 앱이 생성될때 같이 생성되고 앱이 종료될때 같이 사라집니다.
activity의 범위를 넘는 객체를 생성할때 사용합니다.
ex) DB 싱글턴 객체
Activity Context
액티비티의 생명주기와 관련이 있습니다. 액티비티가 소멸되면 컨텍스트도 같이 사라집니다.
액티비티 생성, 소멸과 주기를 같이 하는 객체를 생성할때, view와 관련된 작업을 할때 사용합니다.
(view와 관련된 작업은 Application context로는 할 수 없습니다.)
메모리 누수는 어떻게 발생하는가?
"applicationContext를 써야하는데 activityContext를 쓴 경우"
해당 Activity는 소멸되더라도 참조가 유지되고 있기 때문에, 해당 Activity는 GC되지 않습니다.
그 결과 메모리 누수가 발생합니다.
그래서 어떻게 써야하는가?
컴포넌트 범위에서 끝나는 작업은 각 컴포넌트의 context를 사용한다.
컴포넌트의 범위를 벗어나는 작업(ex_싱글턴 객체를 생성)은 application context를 사용한다.
*참고
https://www.charlezz.com/?p=1080