매우 흥미로운 질문입니다. 나는 이것이 의미 론적 의미라고 생각하며 역사적인 이유 때문일 수도 있습니다.
현재 안드로이드 활동 및 서비스 구현에, 비록 getApplication()
와 getApplicationContext()
같은 개체를 반환이 항상 (특정 공급 업체의 구현, 예를 들어)의 경우가 될 것이라는 보장은 없습니다.
따라서 매니페스트에 등록한 응용 프로그램 클래스를 원한다면 응용 프로그램 인스턴스 (테스트 프레임 워크에서 분명히 경험 한 응용 프로그램 인스턴스)가 아닐 수 있으므로 응용 프로그램을 호출 하여 응용 프로그램에 캐스트 해서는 안됩니다getApplicationContext()
.
왜 getApplicationContext()
처음에 존재합니까?
getApplication()
getApplicationContext()
Context 클래스에서 선언되는 반면 Activity 클래스와 Service 클래스에서만 사용할 수 있습니다 .
그것은 실제로 한 가지 의미입니다. 브로드 캐스트 리시버에서 코드를 작성할 때 컨텍스트가 아니지만 onReceive 메소드에 컨텍스트가 제공되는 경우에만 호출 할 수 있습니다 getApplicationContext()
. 또한 BroadcastReceiver에서 응용 프로그램에 액세스 할 수있는 것은 아닙니다.
Android 코드를 보면 첨부 할 때 활동에 기본 컨텍스트 및 애플리케이션이 수신되고 서로 다른 매개 변수라는 것을 알 수 있습니다. getApplicationContext()
에 전화를 위임합니다 baseContext.getApplicationContext()
.
한 가지 더 : 설명서에는 대부분의 경우 Application을 서브 클래스 화 할 필요가 없다고 말합니다.
일반적으로 서브 클래스가 필요하지 않습니다 Application
. 대부분의 상황에서 정적 싱글 톤은보다 기능적인 방식으로 동일한 기능을 제공 할 수 있습니다. 싱글 톤에 글로벌 컨텍스트가 필요한 경우 (예 : 브로드 캐스트 리시버 등록) 싱글 톤을 처음 구성 할 때 Context
내부적으로 사용 하는 기능을 검색 할 수 있습니다
Context.getApplicationContext()
.
나는 이것이 정확하고 정확한 답변이 아니라는 것을 알고 있지만 여전히 귀하의 질문에 대답합니까?
Application
.