0. 개요
Context는 앱의 현재 상태에 대한 글로벌 정보에 액세스할 수 있게 해주는 인터페이스이다. 기본적으로 애플리케이션 환경에 대한 전역 정보에 액세스하기 위해 사용되며, 앱 리소스 및 클래스에 액세스하거나 액티비티를 시작하거나 브로드캐스트를 보내거나 인텐트를 수신하기 위한 메서드를 제공한다.
이러한 Context는 Android 개발에 있어서 중요하다. 꼭 같이 알아보자.
1. Context
- Context는 클래스이다. 애플리케이션에 대한 전역정보에 액세스하기 위한 추상클래스(abstract class)
- 앱 개발에서 다루게 되는 대부분의 구성요소(Activity, Service, Application 등)은 직 간접적으로 context를 확장(extend)함
2. 종류
- Application Context: 애플리케이션의 생명 주기 동안 존재하며 액티비티 및 서비스의 생명 주기와는 독립적. 주로 전역적인 설정 또는 리소스에 액세스할 때 사용
- Activity Context: 액티비티의 생명주기와 연결되어 있음. UI와 관련된 작업을 수행할 대 주로 사용
3. 주의사항
- 메모리누수: 액티비티 컨텍스트를 잘 못 사용하면(액티비티 생명주기 외부에서 액티비티 컨텍스트를 참조하면 메모리누수 발생) 메모리누수 발생
- 생명주기: 액티비티 컨텍스트는 해당 액티비티의 생명주기에 바인딩. 따라서 종료될 때 까지 참조하면 안된다.
- 매개변수로 사용: 대부분의 경우, 라이브러리나 메서드가 Context를 매개변수로 요구할 때 ApplicationContext 또는 ActivitContext 중 어떤 것을 전달해야 할지 문서를 참고해야 함.
4. 사용사례
1) 리소스 및 Asset에 액세스
- getResource(), getAssets()를 사용하여 앱 리소스 및 자산에 액세스
- java
String value = context.getResources().getString(R.string.app_name);
val value = context.resources.getString(R.string.app_name)
2) 시스템 서비스에 액세스
- getSystemService()를 사용하여 시스템 서비스 (예: Location Service, Notification Service)에 액세스합니다.
- java
LocationManager locationManager = (LocationManager) context.getSystemService(Context.LOCATION_SERVICE);
val locationManager = context.getSystemService(Context.LOCATION_SERVICE) as LocationManager
3) Intent를 사용하여 액티비티 시작
- startActivity()를 사용하여 새로운 액티비티를 시작할 수 있습니다.
- java
Intent intent = new Intent(context, NewActivity.class);
context.startActivity(intent);
val intent = Intent(context, NewActivity::class.java)
context.startActivity(intent)
4)데이터 저장
- getSharedPreferences()를 사용하여 앱 데이터를 저장 및 검색할 수 있습니다.
- java
SharedPreferences sharedPreferences = context.getSharedPreferences("MyPrefs", Context.MODE_PRIVATE);
val sharedPreferences = context.getSharedPreferences("MyPrefs", Context.MODE_PRIVATE)