🤖 안드로이드 Android

[안드로이드/Android] Context (Application Context vs. Activity Context)

핑크빛연어 2021. 10. 27. 17:17


안녕하세요! Android Context 가 무엇일까요? 😢
https://developer.android.com/reference/android/content/Context

Context  |  Android Developers

developer.android.com


Context 는 애플리케이션 환경에 대한 글로벌 정보를 갖는 인터페이스입니다. Context 는 Android 시스템에서 구현체를 제공하는 추상 클래스로, 애플리케이션 별 리소스 및 클래스 접근에 사용되며, 액티비티 실행, 브로드캐스트, 인탠트 수신 등과 같은 애플리케이션 수준 작업에 사용됩니다.


Application Context


안드로이드 시스템 상, ActivityManagerService 라는 독립된 애플리케이션에서 애플리케이션과 관련된 정보를 관리한다.
이 애플리케이션은 특정 앱에 대한 정보를 key, value 쌍으로 구성하는데, ActivityManagerService 에서 내 앱과 관련된 정보의 value 값을 찾기 위한 key가 Context 이다. 내가 어떤 애플리케이션을 나타내고 있는지 알려주는 ID 역할이다.
싱글톤 인스턴스이며, Activiy 에서는 getApplicationContext() 를 통해 접근할 수 있다. 이 Context 는 애플리케이션 생명주기(라이프사이클)에 종속되어 있기 때문에 현재 Context 가 종료되거나 현재 Context 의 생명주기와 상관없이 필요한 작업, Activiy 스코프를 벗어난 Context 에 필요한 작업에 적합하다.
예를 들어, 애플리케이션에 싱글톤 객체를 생성해야 하는데, 해당 객체가 Context 가 필요하다면 Application Context 를 전달해줘야 한다. 만약 Activiy Context 를 전달한다면 Activity 가 종료된 이후에도(Activity 가 화면에 표시되지 않는 순간에도) Activity 를 항상 참조하므로 GC 의 수거대상이 되지 못하기 때문에(가비지 콜렉션이 진행되지 않아) 메모리 누수의 원인이 될 수 있다.

Application Context 를 사용하는 경우

• ActivityViewModel 클래스를 상속받는 viewModel 안에서 Context 를 사용해야 하는 경우
=> viewModel 의 생명주기가 Activity 보다 길기 때문에 Application Context 사용

• Activity 안에서 라이브러리를 초기화해야 하는 경우
=> Application Context 를 전달하여 사용

• ContentProvider 를 상속한 클래스에서 getContext() 를 통해 불러올 수 있는 Context 는 Application Context 이다.


Activity Context


Activity 내에서만 유효한 Context
Activity 안에서 접근이 가능하며, Activity 생명주기에 종속되어 있다. 현재 Activity 의 생명주기 범위 안에서 Context 를 전달해야 하는 경우에만 사용한다.
예를 들어, Activity 생명주기 안에서 객체를 생성하는데 Context 가 필요한 경우라면 Activity Context 를 사용하면 된다. UI 와 관련된 동작들, Toast, dialog 등이 이에 해당된다.

App 의 계층 구조


Application Context Activity Context
- 앱(Application)의 생명주기에 종속되어 있다.
함부로 사용하면 안된다.
- 잘못 사용하면 메모리 누수를 일으킬 수 있다.
- 현재 Context 의 생명주기 넘어서는 범위에서 Context 가 필요한 경우 사용(ActivityViewModel, ContentProvider )
- 라이브러리 초기화 혹은 싱글턴 객체에 컨텍스트를 전달하는 경우
사용
- Activity 범위 안에서 동작이 끝나는 작업을 할 때 사용.
- GUI와 관련된 작업에 컨텍스트가 필요한 경우 사용
(UI 와 관련된 동작들, Toast, dialog 등).



감사합니다 :)

728x90
반응형