Android에는 Context가 5가지가 있다.
먼저, 안드로이드 프레임워크에서 Context는 2종류로 나뉜다.
Application Context
Activity Context
Application Context는 애플리케이션 자체의 생명주기에 영향을 받는다. 따라서 항상 애플리케이션의 생명 주기와 함께 한다.
반면, Activity Context는 액티비티 생명주기와 함께 작동해, onDestroy()
할 때 사라진다. 그래서 사용자가 생명주기 활동이 있는 객체를 생성하거나, 토스트, 다이알로그 등 UI 관련 작업을 할 때 수행될때마다 쓰인다.
액티비티에 대한 환경 정보들이 Context에 있고, 이 Activity Context에 Intent를 통해 다른 액티비티를 띄우면 Activity Stack
이 쌓이게 되는 것이다.
어쨌거나 저쨌거나, Activity, Aplication class 모두 Context
클래스를 상속받아 만들어졌다는 것이다.
애플리케이션 객체를 참조하고 있지만 애플리케이션 클래스 역시 Context class를 상속받고 있다. 그래서 이것 역시 application context를 제공한다.
Activity.getApplicationContext로 application context를 제공한다.
현재 Activity 뿐만 아니라 application의 생명주기와 관련된 context가 필요한 경우 이 메서드를 사용한다. (Acitivy Context 대신)
Application 생명 주기와 연결되어 있어서
1) 싱글톤 객체를 생성해야 하는 경우
2) Activity에서 라이브러리가 필요할 경우
에 쓰일 수 있다.
내부에서 실행되는 모든 Activity를 보유하는 Application에 연결된 Context를 반환하는데 사용된다.
메서드나 생성자를 호출할 때 종종 Context를 전달해야 하며 this를 사용하여 Activity Context를 전달하거나 getApplicationContext()를 사용하여 앱 컨텍스트를 전달하기도 한다.
일반적으로 이 함수는 Application 레벨에 사용되며 모든 Activity를 참조하는데 사용할 수 있다.
만약, Android 앱 전체에서 변수에 접근하려면 해당 함수를 통해 변수를 사용해야한다.
이 base context는 생성자 혹은 setBaseContext()로 설정한다. 대신, ContextWrapper.getBaseContext로 activity context를 제공하기 때문에 ContextWrapper가 있는 경우에만 가능하다.
다른 컨텍스트 내에서 컨텍스트에 액세스해야 하는 경우 ContextWrapper를 사용한다. 그래서 이를 사용하면 원래 Context를 변경하지 않고 동작을 수정할 수 있는 이점이 있다.
| Context Wrapper? 모든 호출을 다른 Context에 단순히 위임하는 Context의 프록시 구현, 원래 Context를 변경하지 않고 동작을 수정하기 위해 서브 클래싱할 수 있다.
View.getContext로 현재 실행중인 View의 Context를 반환한다. 일반적으로 실행되고 있는 액티비티 Context가 반환된다.
Context의 유형이다.
Activity class를 상속받는 본인 클래스를 말하고 있지만 Activity class 역시 Context를 상속 받고 있다. 그래서 Activity Context를 제공한다.
애플리케이션 환경에 대한 전역 정보에 접근할 수 있는 연결 장치이자 Android 시스템에서 implements를 제공하는 추상 클래스이다.
애플리케이션 별 리소스 및 클래스에 대한 접근은 물론 앱 운영 레벨과 같은 Activity, Broadcasting, intents 등에도 접근할 수 있게 한다.
출처 : Android Developer:: Context
어떤 사람이 호텔에 방문한다고 가정해보자. 이 사람은 삼시세끼를 챙겨먹어야한다. 이 외에도 호텔에 머물면서 하고 싶은 일이 많다. 그럼 어떻게 해야할까?
바로 룸 서비스 직원에게 먹을거를 가져와 달라고 요청하는 것이다. 그러면 하려고 했던 일들을 수행하면서 밥을 챙겨먹을 수 있다.
여기서 룸 서비스 직원이 Context고 호텔에 방문한 어떤 사람이 single activity가 되는 것이다.
그리고 hotel은 애플리케이션(응용프로그램)이고, 아침 점심 저녁은 resources가 된다.
difference-and-when-to-use-getapplication-getapplicationcontext-getbasecon